zoukankan      html  css  js  c++  java
  • 微信图片生成插件,页面截图插件 html2canvas,截图失真 问题的解决方案

    html2canvas 是一个相当不错的 JavaScript 类库,它使用了 html5 和 css3 的一些新功能特性,实现了在客户端对网页进行截图的功能。html2canvas 通过获取页面的 DOM 和元素的样式信息,并将其渲染成 canvas 图片,从而实现给页面截图的功能。

    官网:https://github.com/niklasvh/html2canvas

    遇到的问题:

    参考官方的 Demo,发现所截的图失真厉害。

    解决方案:

    将 canvas 的宽高放大到原容器宽高的 3 倍,参考代码如下:

    <html>
    <head>
    	<meta name="layout" content="main">
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    	<script type="text/javascript" src="jquery.min.js"></script>
    	<script type="text/javascript" src="html2canvas.js"></script>
    	<script type="text/javascript" src="canvas2image.js"></script>
    </head>
    <body>
    	<div id="to-image">
    		<h3>Html5页面截图 演示</h3>
    		<div  style="background-color: #abc;padding: 10px">
    			Hello World!
    			<br>
    			<div style="background: url(1.jpg) center center;  500px;height: 300px;"></div>
    			<br>
    			<a href="http://phpgo.cnblogs.com" target="_blank">http://phpgo.cnblogs.com</a>
    			<br>
    			<textarea id="textArea" col="20" rows="3"></textarea>
    		</div>
    	</div>
    	<div style="background-color: red; padding: 10px; margin-top: 10px;">
    		<input id="do-image" type="button" value="开始截图">
    	</div>
    	<div id="show-image">
    
    	</div>
    </body>
    </html>
    
    <script type="text/javascript">
    	$(document).ready(function() {
    		$("#do-image").on("click", function(event) {
    			var dom = $('#to-image');
    			var width = dom.width();
    			var height = dom.height();
    			var type = "png";
    			var scaleBy = 3;  // 缩放比例
    			var canvas = document.createElement('canvas');
    			canvas.width = width * scaleBy;
    			canvas.height = height * scaleBy + 60; // 60 是我处理完后发现短了一点,具体为什么不清楚,如果你也少的话,根据自己的项目调吧
    			canvas.style.width = width * scaleBy + 'px';
    			canvas.style.height = height * scaleBy + 'px';
    			var context = canvas.getContext('2d');
    			context.scale(scaleBy, scaleBy);
    			html2canvas(dom[0], {
    				canvas : canvas,
    				onrendered : function(canvas) {
    					// 放到到原来的 3 倍
    					$("#show-image").append(Canvas2Image.convertToImage(canvas, width * scaleBy, height * scaleBy, type));
    
    					// 在将放大的图片用CSS再缩小,方便在手机上清晰查看
    					$("#show-image img").css("width", width + "px").css("height", height + "px");
    				}
    			});
    
    		});
    	});
    
    </script>

    效果图:


     

    完整示例下载:

    CSDN下载

    参考:

    https://www.zhihu.com/question/48217555

  • 相关阅读:
    Shader 结构体中语义的理解
    计算包围盒中心坐标
    c#脚本控制shader
    PS2键盘 + LCD12864 实验
    基于M9K块配置ROM的LCD12864图片显示实验
    LCD12864 液晶显示-汉字及自定义显示(串口)
    LCD12864 液晶显示-汉字及自定义显示(并口)
    基于Verilog HDL 的数字电压表设计
    基于Verilog HDL的ADC0809CCN数据采样
    触发器(基本的SR触发器、同步触发器、D触发器)
  • 原文地址:https://www.cnblogs.com/52php/p/6904312.html
Copyright © 2011-2022 走看看