朋友圈有些分享功能是通过长按图片另存来实现的,就像淘宝内部要分享朋友圈的时候一样,这些图片可以用canvas来合成。

获取了img的dom对象以后,进行base64的转。

//加载对象
$page.getArrl = function() {
arrl = [{ type: "img", img: document.getElementById("bg"), x: , y: , width: , height: },
{ type: "img", img: document.getElementById("blank"), x: , y: , width: , height: },
{ type: "img", img: document.getElementById("logo"), x: , y: , width: , height: },
{ type: "img", img: document.getElementById("mobi_cloud"), x: , y: , width: , height: }
];
switch ($page.mobi) {
case :
arrl = arrl.concat([
{ type: "img", img: document.getElementById("page2_img_1"), x: , y: , width: , height: },
{ type: "img", img: document.getElementById("page2_img_2"), x: , y: , width: , height: },
{ type: "img", img: document.getElementById("page2_img_3"), x: , y: , width: , height: }
]);
break;
case :
arrl = arrl.concat([{ type: "img", img: document.getElementById("page3_img_1"), x: , y: , width: , height: },
{ type: "img", img: document.getElementById("page3_img_2"), x: , y: , width: , height: },
{ type: "img", img: document.getElementById("page3_img_3"), x: , y: , width: , height: }
]);
break;
case :
arrl = arrl.concat([{ type: "img", img: document.getElementById("page4_img_1"), x: , y: , width: , height: },
{ type: "img", img: document.getElementById("page4_img_2"), x: , y: , width: , height: }
]);
break;
default:
}
if ($page.text === ) {
n = ;
} else {
n = ;
}
arrl = arrl.concat([
// { type: "img", img: document.getElementById("metoo_btn"), x: 168, y: 1200, width: 383, height: 88 },
{ type: "img", img: document.getElementById("mobi_note_bg" + $page.text), x: , y: , width: , height: },
{ type: "text", text: $page.name, font: "24px 'Microsoft Yahei', Tahoma, Helvetica, Arial, sans-serif", style: "red", x: , y: n }
]);
}
//执行合成
$page.getArrl();
$page.merge.img({ width: , height: , material: arrl }, function(data) {
$("#merged").attr("src", data);
$(".share_btn").show();
}); //封装的方法
$page.merge = {
img: function(obj, callback) {
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d');
canvas.width = obj.width;
canvas.height = obj.height;
ctx.rect(, , canvas.width, canvas.height);
ctx.fill(); function drawing(n) {
if (n < obj.material.length) {
if (obj.material[n].type && obj.material[n].type == "text") {
ctx.font = obj.material[n].font;
ctx.fillStyle = obj.material[n].style || "#fff";
var textArr = obj.material[n].text.split("\r\n");
for (var i = ; i < textArr.length; i++) {
ctx.fillText(textArr[i], obj.material[n].x, obj.material[n].y + ( * i));
}
} else {
ctx.drawImage(obj.material[n].img, obj.material[n].x, obj.material[n].y, obj.material[n].width, obj.material[n].height);
}
drawing(n + ); //递归
} else {
//保存生成作品图片
if (callback) callback(canvas.toDataURL("image/jpeg", 0.6));
canvas = null;
}
}
drawing();
},
saveFile: function(data) {
var dataImg = data.replace("image/jpeg", "image/octet-stream");
document.location.href = dataImg;
}
};

用canvas合成图片的更多相关文章

  1. 通过canvas合成图片

    通过canvas合成图片 效果图 页面布局部分 两个图片以及一个canvas画布 <img src="https://qnlite.gtimg.com/qqnewslite/20190 ...

  2. [JavaScript] canvas 合成图片和文字

    Canvas Canvas 是 HTML5 新增的组件,就像一个画板,用 js 这杆笔,在上面乱涂乱画 创建一个 canvas <canvas id="stockGraph" ...

  3. canvas合成图片 圣诞节新技能戴帽

    <!doctype html><html><head><meta charset="utf-8"><title>Html ...

  4. Canvas 实现图片合成并下载合成图片

    现在经常会遇到那种带二维码的推广图片,如下图所示: 1是整张推广图的背景,2是二维码.这种图片的背景是保持不变的,里面的二维码是变化的.所以我们需要把二维码单独生成然后与背景合并. 我们可以通过can ...

  5. Html5 Canvas 实现图片合成

    多个图片合成一张 <!doctype html> <html> <head> <meta charset="utf-8"> < ...

  6. vue 把后端返回的图片和url链接生成的二维码用canvas 合成一张图片

    H5 页面在做某个活动的时候,有两种分享方式,一种是链接分享,一种是图片分享. 链接分享的话,如果是在微信里,就可引导用户利用微信浏览器自带的分享,根据sdk设置分享标题简介链接缩略图即可. 图片分享 ...

  7. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

  8. <canvas合成海报>所遇问题及解决方案总结

    最近做了一个用canvas合成海报图片的移动端项目,由于一点canvas基础都没有,所以去网上搜了一位前辈的demo,但是开发过程中遇到了很多问题,现将所遇问题及解决方法总结如下: 1.移动端canv ...

  9. 离线合成联想到的--canvas合成水印

    前段时间做了功能模块:用户设置自定义勋章: 实现方式:前端把用户设置的昵称传到后台,后台根据不同用户等级,使用离线合成技术合成不同的勋章返回到前端: 方案算是实现了,但是有点坑就是,后台的离线合成没有 ...

随机推荐

  1. SQL Server 2005 无法连接到 127.0.0.1

    [问题描述]如果连接本机的数据库服务器,服务器名称可填: 127.0.0.1或localhost或本机机器全名(比如HOME),有时候用本机机器名可以登录SQL Server 2005,但用127.0 ...

  2. 【剑指offer】二维数组中的查找☆

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.     自己的思路实在 ...

  3. 【剑指offer】构建乘积数组(注意优化空间)

    给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不能使用除法 ...

  4. sublime text3 无法安装插件

    下载 Package Control.sublime-package 点击这里下载: 打开sublime3 -> 首选项 -> 浏览插件 (程序自动打开插件目录) 删除 Package C ...

  5. hdu 4517(递推枚举统计)

    小小明系列故事——游戏的烦恼 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  6. C# 键值对的类型

    一 C# 键值对类有以下类: ①    IDictionary<string, Object> idc = new Dictionary<string, object>(); ...

  7. Linux下通过端口号查询占用的进程,并知道其所在的位置

    比如要查询2181端口. 1.查询端口占用的进程ID netstat -anp | grep 2181 tcp6 0 0 :::2181 :::* LISTEN 10997/java 2181为端口号 ...

  8. [Cocoa]深入浅出Cocoa多线程编程之 block 与 dispatch quene

    深入浅出 Cocoa 多线程编程之 block 与 dispatch quene 罗朝辉(http://www.cppblog.com/kesalin CC 许可,转载请注明出处 block 是 Ap ...

  9. dogpile搜索引擎

    有发现了一个新的搜索引擎——dogpile,结果还不错.据说是综合了多个搜索引擎的结果,展现了最终的搜索结果. 从百科上介绍说,这是一个[元搜索引擎].不懂,继续百科之,如下: 搜索引擎分为全文搜索引 ...

  10. Rebound动画框架简单介绍

    Rebound动画框架简单介绍 Android菜鸟一枚,有不对的地方希望大家指出,谢谢. 最近在接手了一个老项目,发现里面动画框架用的是facebook中的Rebound框架,由于以前没听说过,放假时 ...