html2canvas图片位移_html2canvas html截图插件图片放大清晰度处理方案,支撑恣意放大倍数,处理原插件图片偏移题目...

html2canvas html截图插件图片放大清晰度处理方案,支撑恣意放大倍数,处理原插件图片偏移题目

Author:youzebin (2016.12.6)

插件下载地点:https://github.com/niklasvh/h…

1.起首引入html2canvas.js html2canvas 0.5.0-beta4 最新版即可

必要步骤1:修正插件的源码: (修正的处所有两处)

1. 代码第 999 行 renderWindow 的要领中 修正推断前提 增添一个options.scale存在的前提:

源码:

if (options.type === "view") {

canvas = crop(renderer.canvas, {width: renderer.canvas.width, height: renderer.canvas.height, top: 0, left: 0, x: 0, y: 0});

} else if (node === clonedWindow.document.body || node === clonedWindow.document.documentElement || options.canvas != null) {

canvas = renderer.canvas;

} else {

canvas = crop(renderer.canvas, {width: options.width != null ? options.width : bounds.width, height: options.height != null ? options.height : bounds.height, top: bounds.top, left: bounds.left, x: 0, y: 0});

}

改成:

if (options.type === "view") {

canvas = crop(renderer.canvas, {width: renderer.canvas.width, height: renderer.canvas.height, top: 0, left: 0, x: 0, y: 0});

} else if (node === clonedWindow.document.body || node === clonedWindow.document.documentElement) {

canvas = renderer.canvas;

}else if(options.scale && options.canvas !=null){

log("放大canvas",options.canvas);

var scale = options.scale || 1;

canvas = crop(renderer.canvas, {width: bounds.width * scale, height:bounds.height * scale, top: bounds.top *scale, left: bounds.left *scale, x: 0, y: 0});

}

else {

canvas = crop(renderer.canvas, {width: options.width != null ? options.width : bounds.width, height: options.height != null ? options.height : bounds.height, top: bounds.top, left: bounds.left, x: 0, y: 0});

}

2. 代码第 943 行 html2canvas 的要领中 修正width,height:

源码:

return renderDocument(node.ownerDocument, options, node.ownerDocument.defaultView.innerWidth, node.ownerDocument.defaultView.innerHeight, index).then(function(canvas) {

if (typeof(options.onrendered) === "function") {

log("options.onrendered is deprecated, html2canvas returns a Promise containing the canvas");

options.onrendered(canvas);

}

return canvas;

});

改成:

width = options.width != null ? options.width : node.ownerDocument.defaultView.innerWidth;

height = options.height != null ? options.height : node.ownerDocument.defaultView.innerHeight;

return renderDocument(node.ownerDocument, options, width, height, index).then(function(canvas) {

if (typeof(options.onrendered) === "function") {

log("options.onrendered is deprecated, html2canvas returns a Promise containing the canvas");

options.onrendered(canvas);

}

return canvas;

});

2.运用体式格局

var shareContent = document.getElementById("shareContent");//须要截图的包裹的(原生的)DOM 对象

var width = shareContent.offsetWidth; //猎取dom 宽度

var height = shareContent.offsetHeight; //猎取dom 高度

var canvas = document.createElement("canvas"); //建立一个canvas节点

var scale = 2; //定义恣意放大倍数 支撑小数

canvas.width = width * scale; //定义canvas 宽度 * 缩放

canvas.height = height * scale; //定义canvas高度 *缩放

canvas.getContext("2d").scale(scale,scale); //猎取context,设置scale

var opts = {

scale:scale, // 增加的scale 参数

canvas:canvas, //自定义 canvas

logging: true, //日记开关

width:width, //dom 原始宽度

height:height //dom 原始高度

};

html2canvas(shareContent, opts).then(function (canvas) {

//假如想要天生图片 引入canvas2Image.js 下载地点:

//https://github.com/hongru/canvas2image/blob/master/canvas2image.js

var img = Canvas2Image.convertToImage(canvas, canvas.width, canvas.height);

console.log(img);

});

2017.1.7 优化插件运用的体式格局,并附上demo (插件的修改照样根据上面的操纵流程)

(不好意思列位,近来发明上面插件的运用体式格局上存在截图不完全的bug,

许多人在插件的运用上存在林林总总的题目。所以决议完美这篇文章的内容)

以下我总结了一些注重事项,在代码中解释了,仅供参考。

付:完全运用的demo ,以下:

content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">

html2Canvas demo

document.documentElement.style.fontSize = window.screen.width / 7.5 + 'px';

body,

html,

div,

p,

ul,

li,

a,

img,

span,

button,

header,

footer,

section {

padding: 0;

margin: 0;

}

*, :before, :after {

-webkit-tap-highlight-color: transparent;

-webkit-user-select: none;

outline: none;

box-sizing: border-box;

-webkit-box-sizing: border-box;

}

::-webkit-scrollbar {

width: 0;

opacity: 0;

}

button{

font-family: simsun,"microsoft yahei", arial, "Helvetica Neue", Helvetica, STHeiTi, sans-serif;

}

body {

font-family: "microsoft yahei", arial, "Helvetica Neue", Helvetica, STHeiTi, sans-serif;

color: #000;

background-color: #f5f5f5;

-webkit-overflow-scrolling: touch;

}

.share-container {

padding-top: 0.72rem;

width: 2.35rem;

margin: 0 auto;

}

.share-content {

padding-top: 0.72rem;

height:3rem;

background-color: blue;

border-radius: 5px;

width: 100%;

}

.text{

font-size: 0.36rem;

color: #f2f2f2;

}

.btn-share {

width: 64%;

height: 0.89rem;

background-color: #3baaff;

border-radius: 0.89rem;

border: 1px solid #3baaff;

color: white;

font-size: 0.36rem;

margin: 0.75rem 0 0.67rem;

}

.btn-share:active{

background-color: #1b96c8;

}

截 图

//定义查找元素要领

function $(selector) {

return document.querySelector(selector);

}

var main = {

init:function(){

main.setListener();

},

//设置监听事宜

setListener:function(){

var btnShare = document.getElementById("btnShare");

btnShare.onclick = function(){

main.html2Canvas();

}

},

//猎取像素密度

getPixelRatio:function(context){

var backingStore = context.backingStorePixelRatio ||

context.webkitBackingStorePixelRatio ||

context.mozBackingStorePixelRatio ||

context.msBackingStorePixelRatio ||

context.oBackingStorePixelRatio ||

context.backingStorePixelRatio || 1;

return (window.devicePixelRatio || 1) / backingStore;

},

//绘制dom 元素,天生截图canvas

html2Canvas: function () {

var shareContent = $("#shareContent");// 须要绘制的部份的 (原生)dom 对象 ,注重容器的宽度不要运用百分比,运用牢固宽度,防止缩放题目

var width = shareContent.offsetWidth; // 猎取(原生)dom 宽度

var height = shareContent.offsetHeight; // 猎取(原生)dom 高

var offsetTop = shareContent.offsetTop; //元素间隔顶部的偏移量

var canvas = document.createElement('canvas'); //建立canvas 对象

var context = canvas.getContext('2d');

var scaleBy = main.getPixelRatio(context); //猎取像素密度的要领 (也能够采纳自定义缩放比例)

canvas.width = width * scaleBy; //这里 因为绘制的dom 为牢固宽度,居中,所以没有偏移

canvas.height = (height + offsetTop) * scaleBy; // 注重高度题目,因为顶部有个间隔所以要加上顶部的间隔,处理图象高度偏移题目

context.scale(scaleBy, scaleBy);

var opts = {

allowTaint:true,//许可加载跨域的图片

tainttest:true, //检测每张图片都已加载完成

scale:scaleBy, // 增加的scale 参数

canvas:canvas, //自定义 canvas

logging: true, //日记开关,宣布的时刻记得改成false

width:width, //dom 原始宽度

height:height //dom 原始高度

};

html2canvas(shareContent, opts).then(function (canvas) {

console.log("html2canvas");

var body = document.getElementsByTagName("body");

body[0].appendChild(canvas);

});

}

};

//末了运转代码

main.init();

运转上面的demo 前有以下 注重点:

前面的内容没看过,没下载过html2canvas.js 没根据插件悛改申明操纵的先改好再说

注重元素的款式的运用:

外层元素width 不能运用百分比 ,防止致使图片与笔墨间缩放比例题目

毛病运用体式格局如

.container {

width:50%;

margin: 0 auto;

}

须要改成如:

.container {

width:300px;

margin: 0 auto;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊产品描述计算机语言编辑,亚马逊Listing产品描述编辑讲解

烂人的虚伪我从头看到尾优质答主01-24TA获得超过2782个赞自建listing,就是根据自己的产品,自己打造产品客户端的展示内容,让顾客了解自己的产品,有下单的欲望!建好如果效果不好,还要进行优化,最…

ul 原点显示_web前端开发学习教程,CSS HTML - ul li列表原点如何相连

原标题:web前端开发学习教程,CSS HTML - ul li列表原点如何相连目前我列出两个方案,很详细,希望可以帮助到有疑问的朋友。方案一:html参与考试《第一期模拟考试》3小时50分钟学习文档《LDO电路设计规范》3小时50分钟学习文档《LDO…

计算机的硬盘 内存在哪查到,电脑硬盘内存怎么查看

电脑硬盘内存怎么查看在我们买电脑的时候我们一般都会选择去看看电脑硬盘内存的大小。那么电脑硬盘内存怎么查看呢?下面就由jy135小编来告诉大家吧,欢迎阅读。方法一、在电脑系统中查看1、这里以 Windows7 系统为例,选中桌面的“计算机”图标&#xff0…

计算机组成原理上机实验报告.doc,计算机组成原理第二次上机实验报告.doc

《计算机组成原理第二次上机实验报告.doc》由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关《计算机组成原理第二次上机实验报告.doc》文档请在天天文库搜索。1、青岛理工大学实 验 报 告实验课程: …

linux messages 时间错乱_BATJ 常考的 21 条 Linux 命令,速度收藏!

来源: http://t.cn/EqTIhES一、文件和目录1. cd命令(它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径)cd /home 进入 / home 目录cd .. 返回上一级目录 cd ../.. 返回上两级目录 …

layui导航栏页面滚动固定_网站建设页面导航如何降低用户寻找的时间

做为正确引导客户体验网站的莱单导航栏,从检索视角上而言,也起着关键的功效,莱单导航栏不但联系网站的外界,也联系着网站主页面及其别的网页,是全部网站的“管理中心”,因此网站建设中莱单导航栏设计方案&a…

计算机中字长名词解释,《计算机科学概论》复习题(内含参考答案)

. .一、判断题(红色字体部分略过)1. HTTP是文件传输协议。(注:HTTP是超文本传输协议,支持WEB信息浏览。FTP是文件传输协议,支持文件的上传和下载)2. 一般来说计算机字长越长则性能越强。(注:CPU字长越长,性能当然越强)…

c++ new 数组_用Java实现JVM第八章《数组和字符串》

案例介绍本章主要介绍如何实现让虚拟机处理数组和字符串,在虚拟机功能增强后,我们可以执行数组类型计算和输出字符串。本章需要新增实现数组指令;newarray、anewarray、arraylength、aload、astore、multianewarray、ldc,同时需要…

计算机IP为什么只有255,为什么电脑IP地址最大值是255?

一、为什么电脑IP地址最大值是255?目前我们常用的IP地址叫IPV4地址,如IP地址:192.168.1.1它是4个字节(Byte)的数据,在计算机中1个字节(Byte)8个二进制位(bit)所以一个IP地址共有4832个二进制位,通常被分割为4组&#x…

计算机组成原理课程设计指令扩展,指令扩展设计计算机组成原理课程设计.doc...

指令扩展设计计算机组成原理课程设计计算机科学学院课程设计报告课程 计算机组成原理题目 的实现(指令扩展)年级 2009级专业 计算机科学与技术学号 学生 多啦小鹏任课教师2012年 2月 28日课程设计题目的求值(指令扩展)验收时间2012年2月2日课题设计方案1、课题设计方案1.1、基础…

c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...

第三章:栈和队列下面讲解栈的应用主要内容有:栈的应用、括号匹配、中 后 前 缀表达式转换1.栈的应用1.1括号匹配我们在数学运算中 [(Ab)*c] - (E-F) 往往都会有[ ] 和 ( ) 来表示运算的优先级,我们把这样的[ ] 和 ( ) 提取出来组成的序列叫做…

测试你是什么样的双眼皮软件,来测试你适合哪种双眼皮?

你的脸型适合哪种双眼皮?自己可以来测试下很多人喜欢大眼睛,双眼皮,觉得越宽越大越好看。我觉得只要和自己五官协调就是最好看的。不同脸型适合什么样的双眼皮?1、平行型:适合眼睛比较大、眉弓比较高、眉毛距眼睛较远且…

服务器内存不认硬盘_服务器品牌有哪些?如何选择服务器?

前段时间我们发布丰富机房建设相关内容,有很多朋友就问到如何保证服务器可以支持百万用户访问?服务器品牌有哪些?服务打开速度慢怎么办?选择服务器主要看哪些参数?。本期我们一起来了解这方面内容。一、服务器品牌服务…

mpi由于目标计算机积极拒绝,windows系统lammps安装MPICH2的问题

20170610补充:补充上次补充内容的文字说明:MPICH2的安装一半没问题。最常遇到的问题是不清楚注册时候到底使用哪个用户名或者计算机名。在确保安装成功的前提下,运行命令:mpiexec -register会让输入用户名和密码。这个用户名是计算…

datagridview 手动添加的行如何进行重载_【厚积薄发】如何规划UI图标图集

这是第151篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员)本期目录:如何规划UI…

贾立平是中科学院计算机所博士,中国科学院博士生贾立平:创新变通能力才是未来最根本的竞争力...

人民网北京1月8日电 宇宙巡游2020——UCCA Kids艺术嘉年华4日开幕。中国科学院博士生贾立平表示,脑科学可以更好地了解孩子的想象力、创造力,通过艺术,会更快地促进孩子能力的发展。“宇宙巡游2020”儿童艺术展览学生作品《太阳系的热带森林》…

webview 个人小程序_关于微信小程序webview的使用

小程序微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。同时提供一系列工具帮助开发者快速接入并完成小程序开发。关于如何注册配置就不多言了,本文主要还是体验了下web-view的功能。…

音频服务器未运行怎么办,音频服务未运行怎么办 音频服务未运行解决方法【详细介绍】...

最近许多网友在使用电脑时遇到了“音频服务未运行”的错误提示,出现这种提示的原因有很多,症状也不尽相同。今天我们就针对不同的“音频服务未运行”症状进行分析解答,希望能对大家有所帮助。由于音频服务未运行可能是硬件配置不正确造成的&a…

jquery查找父窗体id_Vue父组件获取子组件中的变量

全世界只有不到3 % 的人关注了我你真是个特别的人在vue项目日常开发中,难免要把功能性组件抽离出来,这样结构就会出现父子组件,兄弟组件等,但是这样就会涉及到不同组件需要互相使用其中的某个值的问题。之前有说过通过ref来让父组…

服务器固态硬盘接口类型,固态硬盘接口都有哪些类型

其实固态硬盘拥有几种接口,根据不同应用场合的固态硬盘一般会有不同的接口。固态硬盘与传统机械硬盘相比,接口规格较多也容易被初用者混淆,因此小编特意整理了一篇名叫“怎么看固态硬盘接口?固态硬盘接口都有哪些类型?”的文章,…