html2canvas生成图片模糊
web jQuery 2021-04-13 2551 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

7441539 2655 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)

第一种方法请查看来源网址

第二种方法:(亲测有效,方便)

作者在 html2canvas 的源码中添加了两个参数,分别为 scale 和 dpi,scale 是比例,辣么 dpi 是个什么玩意儿,以下是百度百科对 dpi 的定义:

DPI 是指每英寸的像素,也就是扫描精度。DPI 越低,扫描的清晰度越低,由于受网络传输速度的影响,web 上使用的图片都是 72dpi,但是冲洗照片不能使用这个参数,必须是 300dpi 或者更高 350dpi。例如要冲洗 46 英寸的照片,扫描精度必须是 300dpi,那么文件尺寸应该是(4300)(6300)=1200 像素*1800 像素。

只要增大 dpi 或者 scale 肯定能使同样宽高的图像变得清晰,那么模糊的问题也就不存在了。

from clipboard

使用:

import "@/assets/js/html2canvas.js"; // 引入刚刚自己下载的js文件
// 调用的方法
html2canvas(document.querySelector(".report"), {
    // 以下字段可选
    width: 490, // canvas宽度
    height: 240, // canvas高度
    x: 0, // x坐标
    y: 0, // y坐标
    foreignObjectRendering: true, // 是否在浏览器支持的情况下使用ForeignObject渲染
    useCORS: true, // 是否尝试使用CORS从服务器加载图像
    async: false, // 是否异步解析和呈现元素
    // 以下字段必填
    background: "#ffffff", // 一定要添加背景颜色,否则出来的图片,背景全部都是透明的
    dpi: 300, // 处理模糊问题
    onrendered: function (canvas) {
        // https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toDataURL
        // let url = canvas.toDataURL('image/png', 1.0)
        let url = canvas.toDataURL();
        console.log(url);
    },
});
特别提示 html2canvas 生成图片的坑:
1,有一些 css 样式没有办法直接识别,比如新增的 css,渐变,或者是 border-radius: 50%; 是没有效果的,必须要写成固定的数值才可以,正确写法:border-radius: 50px
2,如果你项目的背景色默认是白色的,你自己也没有给项目添加颜色,生成后的图片就是带透明效果,所以要给 html 添加一个白色背景颜色

3,第一种方法不需要自己单独下载 js 到本地项目中,第二种方法需要单独下载 js 文件


20210414

如果上面方法不管用的话,可以尝试如下方法,我就是这么解决的

1,下载新版本html2canvas.js,网上说旧版本导致不清晰https://blog.csdn.net/kouwoo/article/details/105529681?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

https://github.com/niklasvh/html2canvas/releases/tag/v1.0.0-alpha.9

或者是官网下载

http://html2canvas.hertzen.com/

2,js代码,代码来源https://segmentfault.com/q/1010000019461333

function createImg() {
            //创建一个新的canvas
            var canvas2 = document.createElement("canvas");
            //获取宽高
            var w = $('#jietu').width();
            var h = $('#jietu').height();

            html2canvas(document.querySelector('#jietu'), {
                scale: 2,
                dpi: window.devicePixelRatio * 2, // window.devicePixelRatio是设备像素比
            }).then(function(canvas) {

                var dataUrl = canvas.toDataURL();
                var newImg = document.createElement("img");
                newImg.src = dataUrl;

                newImg.width = w;
                newImg.height = h;

                $("#screenShotImg").show();
                $("#screenShotImg").html(newImg);
            });

            }
不能用下面的代码,不知道为什么,点击生成图片没反应

cdn可以,<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>,但是不清晰

本地不行<script src="/static/module/index/xin/js/html2canvas.js"></script>


from clipboard

版权声明:本篇文章来源于网络。 来源链接

相关推荐
TypeError: e.indexOf is not a function解决方法
jQuery | 2020-06-23 6797
This error might be caused by jquery event aliases like .load, .unload or .error deprecated since jQuery 1.8. Look for these aliases in your code and replace them with .o...
jquery出现Uncaught TypeError: $(...).prop is not a function问题
jQuery | 2019-08-23 6685
做全选功能的时候用到 var xz = $(this).prop("checked"); 提示: Uncaught TypeError: $(...).prop is not a function 应该是jquery版本过低造成的,更换高版本成功解决问题, jquery下载地址 http://www...
评论:0条
评论加载中...
发表评论
前一篇: