朋友圈有些分享功能是通过长按图片另存来实现的,就像淘宝内部要分享朋友圈的时候一样,这些图片可以用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. VIM使用技巧2

    假如有以下程序片段: var foo = 1 var bar = 'a' var foobar = foo + bar 如果我们想在每行行尾加上分号, (1)使用$移动光标到行尾, (2)执行a;&l ...

  2. [wxPython学习]wx.CallAfter和wx.FutureCall

    [wxPython学习]wx.CallAfter和wx.FutureCall 今天才学到的两个wxPython中的函数:wx.CallAfter和wx.FutureCall.这是两个无关的函数,但又多 ...

  3. 涂色问题(Python)

    题目:将一个圆形等分成N个小扇形,将这些扇形标记为1,2,3,-,N.现在使用M种颜色对每个扇形进行涂色,每个扇形涂一种颜色,且相邻的扇形颜色不同,问有多少种不同的涂法?(N≥1,M≥3) 参考:ht ...

  4. NGINX配置获取CloudFlare 下的访客真实IP并记录到日志

    我用的是lnmp.org的环境 /usr/local/nginx/conf/nginx.conf 在 http { } 部分增加 map $HTTP_CF_CONNECTING_IP $clientR ...

  5. nodejs递归创建目录

    var fs = require("fs"); var path = require("path"); // 递归创建目录 异步方法 function mkdi ...

  6. iOS数组去重的方法,超级简单

    //最近新发现的一个数组去重,用不着循环,一句代码搞定 //去除数组中重复的 NSArray *oldArr = @[@"1",@"2",@"3&qu ...

  7. Java微信开发以及对各种云的评价

    目前一个人用Java开发一个微信的会员系统,开发已经结束,现在进入测试阶段. 有一些时间看看市面上的一些Java的微信开发视频,看了一下北风网的<微信公众平台开发Java版第一季>中的1, ...

  8. NormalMap 贴图 [转]

    转载: http://www.zwqxin.com/archives/shaderglsl/review-normal-map-bump-map.html   说起Normal Map(法线贴图),就 ...

  9. python 制作wordcloud词云

    pip install wordcloud 需要用到numpy  pillow matplotlib 安装完成以后 wordcloud_cli --text in.txt --imagefile ou ...

  10. Linux学习之十四-Linux文件和目录权限

    Linux文件和目录权限 在Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录. 通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问:允 ...