最近这个记仇图片在我的一些群里出现次数相当高,朋友们都会去用修图软件去改下面的文字,作为一个前端党就在想能不能更加便利一点,一开始想用 canvas
去画文字,后来就偶然搜到了 html2canvas,是一款截图工具,那这样就方便多了。
具体实现方式就是利用 html2canvas 对一个 Div 进行截图,在这个 Div 里有记仇的图片和可编辑的文本框,然后再在下面展示并下载下来就阔以了,这部分涉及到了 base64 图片的下载,也是借用了 segmentFault 上大神的代码
措施
需要修改 html2canvas 的源码, 具体源码就不放出来,在 github 中有 commit 记录。
另外新版 html2canvas 最新版已经改为 promise 模式,本来想用最新版的,但是一直报下面的错误
Invalid value given for Length: "auto"
到官方 github 中也没有找到解决措施,因此还是用了以前版本的 html2canvas
还是把解决措施贴出来吧 😂
把项目文件 html2canvas.js 第 942 行代码
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;
});
替换为
var width = options.width != null ? options.width : node.ownerDocument.defaultView.innerWidth;
var 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;
});
1
Mogugugugu 2018-05-18 21:32:57 +08:00 via Android
大神 666,不过手机用 via 浏览器无法下载或者保存图片,提示仅支持 http/https
|
2
cai314494687 2018-05-18 21:41:55 +08:00
@Mogugugugu 微信长按图片,保存?
|
3
Mogugugugu 2018-05-18 21:46:27 +08:00 via Android
不是微信,手机上用 via 浏览器打开,都无法保存的
|
4
qof3990 2018-05-18 21:59:04 +08:00 via Android
有趣,赶紧记下来。
再做个表情包自定义文字吧。虽然已经有人做了一些。不过你可以做个裁剪图片上的文字再重新添加的。 |
5
abcde51111 2018-05-18 21:59:06 +08:00 via Android
试了下 可以 大神 666
|
6
hutchins OP @cai314494687 这个还没实现,明天搞一搞
|
8
hutchins OP @Mogugugugu 现在保存是直接下载,还没弄长按保存
|
9
youngxu 2018-05-18 23:38:55 +08:00 via Android
666
|
10
fe619742721 2018-05-19 00:28:29 +08:00 via iPhone
想法不错啊,用过很多次 html2canvas,也用过很多表情编辑器,我咋没想到弄一个这个。。666,明天我也尝试写个玩玩
|
11
Trim21 2018-05-19 00:31:21 +08:00
建议不要点保存的同时自动下载,用电脑时想要发表情直接就复制了...
|
12
Twinkle 2018-05-19 00:37:03 +08:00
|
13
FrankFang128 2018-05-19 00:53:32 +08:00
想要报存图片还是搞个后端服务器吧
|
14
pkookp8 2018-05-19 01:55:39 +08:00 via Android
顺便可以加
别说 18 号,19,20,21 也不会有,直接记下来 |
15
ssrtree 2018-05-19 03:16:46 +08:00 via Android
手机 UC 可以保存。但是图片不居中,偏上了。下面一截黑色的。
|
16
mejee 2018-05-19 06:38:05 +08:00 via Android
真好玩,感谢楼主,建议日期可以用当前时间自动生成
|
17
ob 2018-05-19 07:08:14 +08:00
接下来,就开始要自己上传图片了。。
|
18
yamedie 2018-05-19 07:15:28 +08:00 via Android 1
我也做过很多类似的,比如“我想对你说”
http://mayao.qiniudn.com/tell-u/ |
20
hutchins OP @ssrtree 刚开始我的浏览器也出现下面是黑色的,然后我把上面整个 div 背景调成白色就好了
|
25
hutchins OP 更新了一下。取消了自动下载,添加了当前日期和上传自定义图片
|
26
mejee 2018-05-19 17:44:51 +08:00 via Android
升级的很快啊,那么再刚一波需求:
1,文字可以通过鼠标擦掉 2,添加的文字可以自定义位置 |
27
xuanyuanaosheng 2018-05-19 18:54:42 +08:00 via Android
不错,6666
|
28
Cytion 2018-05-19 19:08:41 +08:00 via Android
投了铜币,楼主别记仇(逃
|
31
xshwy 2018-05-21 12:51:33 +08:00
请问可以用在自己的网站吗?没有盈利,会标注项目地址
|
33
Oo0 2018-05-21 16:25:06 +08:00 via iPhone
还以为真记谁的仇
|
34
Lanke0 2018-05-21 19:09:56 +08:00
恩,不错
|
36
wjm2038 2018-05-22 12:30:48 +08:00
请问一下 canvas 的边界是在哪里设置的啊,发现如果点击的时候下滑屏幕会出黑框
|
37
polarbearn 2018-05-22 14:42:16 +08:00
@wjm2038 这个边框就是包住图片和文字的 div 的边框
|
40
liudanning 2018-05-23 10:23:42 +08:00
@hutchins btn.onclick 里面加一句 window.scrollTo(0, 0) 似乎就好了。
|
41
hutchins OP @liudanning 等回去试下,感谢😘😚😗😙
|
42
ubuntullmx 2018-05-31 18:20:34 +08:00
不错啊
|