朋友圈有些分享功能是通过长按图片另存来实现的,就像淘宝内部要分享朋友圈的时候一样,这些图片可以用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. Cryptography I 学习笔记 --- 分组密码

    1. 伪随机置换(PRF,Rseudo Random Permutaion)3DES/AES,K*X -> X(a. 可以高效计算,b. PRF函数是一个一一映射的函数,c. 存在有效的逆向算法 ...

  2. Network | 协议栈

    因特网协议栈Internet protocol stack: 应用层Application layer.运输层Transport layer.网络层Network layer.链路层Data link ...

  3. NOIP2016模拟赛三 Problem C: 不虚就是要AK

    题目大意 给定一棵带有边权的树, 问你在树上随机选两个点, 它们最短路径上的边权之和为\(4\)的倍数的概率为多少. Solution 树分治. 没什么好讲的. #include <cstdio ...

  4. Ubuntu 16.04安装深度的Wine(deepin-wine 1.9.0)

    说明: 1.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 2.提取自QQ和迅雷安装包,如果安装了这个Wine不成功,可能是依赖问题,再试多几次, ...

  5. django导出数据到excel

    import xlwt,StringIodef dumpData(request): #获取数据 activitys = Activity.objects.all().order_by('id') i ...

  6. NormalMap 贴图 [转]

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

  7. 【前端阅读】——《程序员思维修炼》摘记&读后感&思维导图

    前言:这是一本介绍如何用脑的书,并从思维的角度(以程序员为例),介绍如何从新手成为专家.作者带领着读者(我)共同经历一次有关认知科学.神经学.学习和行为理论的旅程,探索人类大脑令人 惊奇的工作的机制, ...

  8. Flak快速上手

    本文介绍如何上手 Flask . 这里假定你已经安装好了 Flask ,否则请先阅读< 安装>. 如果已安装好Flask,通过以下命令查看 一个简单的例子: from flask impo ...

  9. 使用Shiro

    一.架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙.Shiro的应用不依赖任何容器,它也可以在JavaSE下使用.但是最常用的环境还是JavaEE.下面以 ...

  10. 第一个Swift程序Hello World

    import Foundation print("Hello, World!") print("I am here!") var arr=["项羽&q ...