canvas toDataURL转base64实现多张图片合成一个图片

前端时间,做穿搭助理时遇到这样一个问题;多张图片合成一张图片的问题

业务背景是这样的:

后台会根据不同天气,根据某种规则;推荐给用户不同的衣服搭配。我们姑且将每一套我们称之为    一个模板;

然后,还要求模板的布局按照衣服的类型,模板不同的布局方案

现在大概模板类型有如下几个(后期还会加)

本来,计算,定位这个模板已经够头疼了的;现在产品说这个加入衣橱操作要把整个模板合成一张图,放到衣橱图片库中

还好之间简单看过《H5高级程序设计》貌似提到了,可以直接将canvas转成图片的方法;

wsc上也有说明,但是一笔带过了  http://www.w3school.com.cn/tags/html_ref_canvas.asp

$("canvas")[0].toDataURL();

目前模板的效果如下图所示:

现在我把上面的业务全部剥离出去,关键代码如下:

    $("canvas").attr({
        "width": $(window).width() + "px",
        "height": "400px"
    });

    var img = [public_url + "/images/bank-guangda.png", public_url + "/images/bank-zhaosang.png", public_url + "/images/Assist_man.png"]
    var canvas = $("canvas")[0].getContext(‘2d‘);
    var imgobj = {};

    var imgin = function() {
        for (var i = 0; i < img.length; i++) {
            var $img = new Image();
            $img.src = img[i];

            var loadImg = function($img, i) {
                $img.onload = function() {
                    canvas.drawImage($img, i * 50, i * 50, 50, 50);
                }
            };
            loadImg($img, i);
        }
        var base64 = $("canvas")[0].toDataURL();
        console.log(base64);
    }
    imgin();

需要说明一点就是:

要监听img的load事件,保证图片加载成功之后,再在画布上画出来;

转base64的方法是$("canvas")[0].toDataURL();不是

$("canvas")[0].getContext(‘2d‘).toDataURL();  本人刚开始没注意,搞了半天才发现问题出在这里。

最后转出的效果大概如下,注意base64是有损压缩。

时间: 2024-10-05 14:02:51

canvas toDataURL转base64实现多张图片合成一个图片的相关文章

canvas toDataURL() 方法如何生成部分画布内容的图片

HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI .可以使用 type参数其类型,默认为 PNG 格式.图片的分辨率为96dpi. 如果画布的高度或宽度是0,那么会返回字符串"data:,". 如果传入的类型非"image/png",但是返回的值以"data:image/png"开头,那么该传入的类型是不支持的. Chrome支持"image/webp"类型. 语法 ca

jpg转换成PDF 如何将多张图片合成一个PDF文件

一般扫描一些文档资料之后形成的图片会放在同一个文件夹中,但是有时为了便于查看和管理这些图片,就会将图片合成一个文档,这样查看内容的时候会比较方便,一般也都是将图片转换成PDF文件. 把图片转换成PDF有很多方法,其中比较简单快速的方法是通过转换工具来直接转换,在处理大量图片的时候可以一次将这些图片合成到一个PDF文件中. 首先在PDf转换器中选择“图片转PDF”,这个选项在其他文件转换成PDF中. 然后把这些图片按编号顺序添加到合成的列表中,基本所以图片格式都可以添加.添加完图片之后一定要注意下

使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,

一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不够. 下面我们就说说,利用canvas 生成带水印的图片. 1.我们要实现一下效果 2.创建一个canvas var canvas = document.createElement('canvas'); var time = new Date(); var logoCanvas =time+' '+

js多张图片合成一张图,canvas(海报图,将二维码和背景图合并) -----vue

思路:vue中图片合并 首先准备好要合并的背景图,和请求后得到的二维码, canvas画图,将两张背景图和一张二维码用canvas画出来, 将canvas再转为img 注意canvas和图片的清晰图和图片的尺寸位置 开始时canvas是隐藏的,两张背景图时显示的,当canvas画完后再转为img的时候,隐藏canvas和背景图,显示canvas转完的图片(也就是合并后的图片) 这个适配方式可能有些瑕疵,所以会加了很多设备的判断 代码: html      <div class="wap-p

canvas.toDataURL(type, args)

canvas.toDataURL(type, args)该方法能够将canvas转换为图像,图像是基于Base64编码的.如果不指定两个参数,无参数调用该方法,转换的图像格式为png格式 •type:指定要转换的图像格式,如 image/png.image/jpeg等.•args:可选参数.例如,如果type为image/jpeg,则args可以是0.0和0.1之间的值,以指定图像的品质. 例如,下面的代码将canvas中已绘制的内容在一个新的浏览器窗口或选项卡中打开: var canvas =

canvas.toDataURL 由于跨域报错的解决方法

关于canvas.toDataURL 由于跨域报错的解决方法 用过canvas,都知道toDataURL这个方法真好用,不仅合成图片用到它,压缩图片也用到它.但有一个问题,就是图片源不能跨域,不然会报错: Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. 解决方法,相信大家都知道了,就是在图片img加上crossOri

快速解决Canvas.toDataURL 图片跨域的问题

出现Canvas.toDataURL 图片跨域问题怎么解决呢?下面小编就为大家带来一篇Canvas.toDataURL 图片跨域问题的快速解决方法.一起跟随小编过来看看吧 如题,在将页面的图片地址进行本地输出时(Html2Canvas.js),因不同源存在跨域问题,会出现toDataURL访问权限问题: [Redirect at origin 'http://sub1.xx.com' has been blocked from loading by Cross-Origin Resource S

canvas toDataUrl 跨域问题

使用canvas 的 toDataUrl方法会遇到跨域问题 chrome 会报下面的错误: Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. Firefox 会报下面的错误: SecurityError: The operation is insecure. 解决方案分两步: 1.在服务端设置响应头部 Access-

iOS多张图片合成

原文链接: iOS多张图片合成 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158