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

    reportlab.canvas有这六个主要参数 1.pagesize:设置纸张大小    #from reportlab.lib.pagesizes import letter, A4  导入常见的 ...

  2. js中eval()和$.parseJSON()的区别

    之前自己一直对ajax不是特别的熟悉,所以一般都很少用这个去写功能,但是最近这个项目中用到了,用ajax异步传数据,json传数据这个时候就需要去解析传过来的数据了,eval()和$.parseJSO ...

  3. java 修改类注释

    在Windows->Preferences->Java->Code Style->Code Templates 的 Comments中 Types 是控制类的注释 /** * ...

  4. [Python Cookbook] Numpy: Iterating Over Arrays

    1. Using for-loop Iterate along row axis: import numpy as np x=np.array([[1,2,3],[4,5,6]]) for i in ...

  5. python中mp3转wav(Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work")

    1.下载pydub:pip install pydub 2.下载与操作系统一致的ffmpeg:http://ffmpeg.org/download.html 3.解压后将下载的ffmpeg下的bin目 ...

  6. SecureCRT导出服务器列表或配置文件

    说明:SecureCRT没有Xshell那么简单有直接导出的功能,但是可以通过技巧的方式来操作. 1.打开SecureCRT,点击菜单栏的[Opitions]->[Global Opitions ...

  7. spring与struts2整合出现常见错误

    错误信息 严重: Exception starting filter struts2 Unable to load configuration. - bean - jar:file:/F:/Strut ...

  8. 单源最短路Dijstra算法

    Dijstra算法是寻找从某一顶点i出发到大其他顶点的最短路径.Distra算法的思想与Prim算法很像,它收录顶点的规则是按照路径长度递增的顺序收录的.设v0是源顶点,我们要寻找从v0出发到其他任意 ...

  9. mac python 切换系统默认版本

    1 找到所安装python路径/usr/local/Cellar/python/2.7.13/bin2 vim ~/.bash_profile 3 添加如下代码: PATH="/usr/lo ...

  10. wxWidgets界面开发工具wxFormBuilder的使用

    wxFormBuilder 下载地址:http://download.csdn.net/detail/lsmallstop/7013401 安装完成后,打开wxFormBuilder,可以在左侧工程子 ...