自动生成圆形装盘奖励图片

每次做抽奖活动的时候,会有一张圆形的奖励图片。这个图片有时候运营偶尔修改一下还可以接受,但是万一很频繁的更换里面的内容的话,那每次都做一次修改那就很浪费时间,然后就想到了用canvas来自动生成这张图片。这样就节省了很多时间。

然后就需要用到一张固定尺寸的圆形转盘的背景,各种素材若干张,然后就可以自己手动上传图片生成这张图片了。

这个主要就是用到了canvas的rotate,translate,drawImage的方法就可以完成了,注意这个仅提供一个demo,可以自己再优化的哦,至于怎么优化,用过才知道!

HTML如下:


 1     <div class="page">
2 <div class="title">
3 <h1>自动生成圆形转盘图片1.0</h1>
4 </div><!--end .title-->
5 <div class="param">
6 <div class="param-background">
7 <h3>背景图片</h3>
8 <div class="bg">
9 <span class="bg-item">背景图片:</span>
10 <span class="item-content">
11 <span class="fileWrapper">
12 <span class="input-file">
13 选择文件<input type="file" hidefocus="true" value="" class="select-file">
14 </span>
15 </span>
16 <i class="filename"></i>
17 </span>
18 <div class="img-hold" id="bg"></div>
19 </div>
20 </div><!--end .param-background-->
21 <div class="param-base">
22 <h3>基本参数</h3>
23 <ul>
24 <li style="display: none;"><label>背景宽度:<input type="text" id="bgWidth" readonly= ‘readonly‘></label></li>
25 <li style="display: none;"><label>背景高度:<input type="text" id="bgHeight" readonly= ‘readonly‘></label></li>
26 <li style="display: none;"><label>奖品宽度:<input type="text" id="giftWidth" readonly= ‘readonly‘></label></li>
27 <li style="display: none;"><label>奖品高度:<input type="text" id="giftHeight" readonly= ‘readonly‘></label></li>
28 <li><label>图片拉伸:<input type="text" id="scaleWidth" value="1">宽度,系数少于1</label></li>
29 <li><label>图片拉伸:<input type="text" id="scaleHeight" value="1">高度,系数少于1</label></li>
30 <li><label>位移参数:<input type="text" id="displaceNum" value="50"></label>距离中心点的距离</li>
31 <li style="display: none;"><label>奖品个数:<input type="text" id="giftNum" readonly= ‘readonly‘></label></li>
32 </ul>
33 </div><!--end .param-base-->
34 <div class="param-img">
35 <h3>奖励图片</h3>
36 <ul id="gift-list">
37 <li>
38 <span class="item-title">图片1:</span>
39 <span class="item-content">
40 <span class="fileWrapper">
41 <span class="input-file">
42 选择文件<input type="file" hidefocus="true" value="" class="select-file">
43 </span>
44 </span>
45 <i class="filename"></i>
46 </span>
47 <div class="img-hold"></div>
48 <div class="oprate">
49 <a href="javascript:;" class="add-btn">增加</a>
50 <a href="javascript:;" class="delete-btn">删除</a>
51 </div>
52 </li>
53 </ul>
54 </div><!--end .param-img-->
55 </div><!--end .param-->
56 <div class="btn">
57 <a href="javascript:void(0);">生成图片</a>
58 </div>
59 <div class="canvas-box">
60 <h3>画布区域</h3>
61 <canvas id="canvas"></canvas>
62 <canvas id="temp"></canvas>
63 </div><!--end .canvas-box-->
64 <div class="result-box">
65 <h3>图片区域</h3>
66 <div class="result"></div>
67 <div class="result-btn">
68 <a href="#@" target="_blank">点击查看</a>
69 </div>
70 </div><!--end .result-box-->
71 </div><!--end .page-->

核心js代码:


  1 var A = {
2 init: function() {
3 A.chooseFile();
4 $(document).delegate(‘.add-btn‘, ‘click‘, A.addItem);
5 $(document).delegate(‘.delete-btn‘, ‘click‘, A.removeItem);
6 $(‘.btn a‘).click(function() {
7 A.convertImageToCanvas(); //先生成canvas
8 var obj = document.getElementById(‘canvas‘);
9 var image = A.convertCanvasToImage(obj); //后生成图片
10 $(‘.result‘).html(‘‘).append(image); //插入图片
11 $(‘.result-btn a‘).attr(‘href‘, image.src);
12 });
13 },
14 chooseFile: function() {
15 if (typeof FileReader === ‘underfined‘) {
16 alert(‘抱歉,你的浏览器不支持 FileReader‘);
17 return false;
18 } else {
19 $(document).delegate(‘.select-file‘, ‘change‘, A.readFile);
20 }
21 },
22 getIndex: function(obj, arr) {
23 var i = 0;
24 for (i = 0; i < arr.length; i++) {
25 if (arr[i] == obj) {
26 return i;
27 }
28 }
29 },
30 getParam: function() {
31 $(‘#bgWidth‘).val(function() {
32 return $(‘.bg‘).find(‘img‘).css(‘width‘) || 0;
33 });
34 $(‘#bgHeight‘).val(function() {
35 return $(‘.bg‘).find(‘img‘).css(‘height‘) || 0;
36 });
37 $(‘#giftWidth‘).val(function() {
38 return $(‘#gift-list‘).find(‘img‘).css(‘width‘) || 0;
39 });
40 $(‘#giftHeight‘).val(function() {
41 return $(‘#gift-list‘).find(‘img‘).css(‘height‘) || 0;
42 });
43 $(‘#giftNum‘).val(function() {
44 return $(‘#gift-list‘).find(‘img‘).size();
45 })
46 },
47 readFile: function() { //读取图片显示图片
48 var _this = this;
49 var reader = new FileReader();
50 var f = _this.files[0];
51 if (!/image\/\w+/.test(f.type)) {
52 alert("文件必须为图片!");
53 return false;
54 } else {
55 reader.onload = function(e) {
56 var data = e.target.result;
57 var image = new Image();
58 image.onload = function() {
59 var width = image.width,
60 height = image.height;
61 $(_this).parents(‘.item-content‘).next(‘.img-hold‘).find(‘img‘).css({
62 ‘width‘: width,
63 ‘height‘: height
64 });
65 A.getParam();
66 };
67 image.src = data;
68 var imgHtml = ‘<img src="‘ + this.result + ‘" />‘;
69 $(_this).parents(‘.item-content‘).next(‘.img-hold‘).html(‘‘).append(imgHtml);
70 }
71 reader.readAsDataURL(f);
72 var fileName = _this.value.split(‘\\‘).pop(); //获取文件选择框的值
73 $(_this).parents(‘.item-content‘).find(‘.filename‘).text(fileName); //填充图片预览
74 }
75 },
76 addItem: function() {
77 var i = $(‘.item-title‘).size() + 1;
78 var _html = ‘<li><span class="item-title">图片‘ + i + ‘:</span><span class="item-content"><span class="fileWrapper"><span class="input-file">选择文件<input type="file" hidefocus="true" value="" class="select-file"></span></span><i class="filename"></i></span><div class="img-hold"></div><div class="oprate"><a href="javascript:;" class="add-btn">增加</a><a href="javascript:;" class="delete-btn">删除</a></div></li>‘;
79 $(‘#gift-list‘).append(_html);
80 },
81 removeItem: function() {
82 var left = $(‘#gift-list li‘).size();
83 if (left <= 1) {
84 alert(‘只有一个了哦!‘)
85 } else {
86 $(this).parents(‘li‘).remove();
87 $(‘#giftNum‘).val(left - 1);
88 $(‘.item-title‘).each(function(i) {
89 $(this).text(‘图片‘ + (i + 1) + ‘:‘);
90 });
91 }
92 },
93 getJsImageObj: function() {
94 var arr = [];
95 var oImg = $(‘#gift-list‘).find(‘img‘);
96 for (var i = 0; i < oImg.length; i++) {
97 arr.push(oImg[i]);
98 }
99 return arr;
100 },
101 convertImageToCanvas: function() { //生成两个画布
102 var context = document.getElementById(‘canvas‘);
103 var ctx = context.getContext("2d");
104 var ctxWidth = parseInt(document.getElementById(‘bgWidth‘).value);
105 var ctxHeight = parseInt(document.getElementById(‘bgHeight‘).value);
106 var image = $(‘.bg‘).find(‘img‘)[0]; //jq 转 js 对象
107 context.setAttribute(‘width‘, ctxWidth); //绘制画布的宽度
108 context.setAttribute(‘height‘, ctxHeight); //绘制画布的高度
109 ctx.clearRect(0, 0, ctxWidth, ctxHeight); //画布某某个范围内的内容,参数分别为x,y,宽度,高度
110 ctx.drawImage(image, 0, 0); //绘制大背景
111 A.printGift(); //打印图片
112 },
113 printGift: function() {
114 var displaceNum = document.getElementById(‘displaceNum‘).value || 0;
115 var scaleWidth = document.getElementById(‘scaleWidth‘).value || 0;
116 var scaleHeight = document.getElementById(‘scaleHeight‘).value || 0;
117 var context = document.getElementById(‘canvas‘);
118 var ctx = context.getContext("2d");
119 var deg = 360 / parseInt(document.getElementById(‘giftNum‘).value); //旋转角度
120 var ctxWidth = parseInt(document.getElementById(‘bgWidth‘).value);
121 var ctxHeight = parseInt(document.getElementById(‘bgHeight‘).value);
122 var objGift = A.getJsImageObj();
123 ctx.translate(ctxHeight / 2, ctxHeight / 2); //确定中心点中心点
124 for (var i = 0; i < objGift.length; i++) { //循环绘制礼物小图
125 ctx.save();
126 ctx.rotate((deg * i) * Math.PI / 180);
127 ctx.translate(0, -displaceNum);
128 ctx.drawImage(objGift[i], -objGift[i].width / 2 * scaleWidth, -objGift[i].height / 2 * scaleHeight, objGift[i].width * scaleWidth, objGift[i].height * scaleHeight); //离中心点的参数也需要可以配置,参数:图片地址,离中心点X,离中心点y,图片width伸缩,图片height伸缩
129 ctx.restore();
130 }
131 },
132 convertCanvasToImage: function(canvas) { //canvas 转 image ,暂时只能转png
133 var image = new Image();
134 image.src = canvas.toDataURL("images/png");
135 return image;
136 }
137 }
138 A.init();

样式就自己美化了哦,然后别忘添加JQ库噢!

时间: 2024-10-05 23:12:54

自动生成圆形装盘奖励图片的相关文章

自动生成Android不同分辨率下的图片

Android屏幕分辨率适配的图标处理比较麻烦,让UI做不同尺寸的图片也挺浪费时间的,并且容易出错,于是用Python写了个工具自动化处理图片,UI只需要做好1080*1920分辨率下的图片就可以了,其它分辨率的图片自动生成. import os.path import sys from PIL import Image """ 自动生成不同分辨率下的App图片 UI设计1080*1920分辨率图片,放在drawable-xxhdpi目录下,自动生成其它的分辨率图片 &quo

[原创]超强C#图片上传,加水印,自动生成缩略图源代码

<%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ Import Namespace=“System.IO“ %> <%@ Import Namespace=“System.Net“ %> <%@ Import NameSpace=“System.Web“ %> <%@ Import NameSpace=“Legalsof

iOS图片攻略之:有3x自动生成2x 1x图片

关键字:Xcode插件,生成图片资源 代码类库:其他(Others) GitHub链接:https://github.com/rickytan/RTImageAssets 本项目是一个 Xcode 插件,用来生成 @3x 的图片资源对应的 @2x 和 @1x 版本,只要拖拽高清图到 @3x 的位置上,然后按 Ctrl+Shift+A 即可自动生成两张低清的补全空位.当然你也可以从 @2x 的图生成 @3x 版本,如果你对图片质量要求不高的话. 特性只会填补空位,如果你已经设置好了自己的 @2x

生成圆形图片

根据Bitmap生成圆形的Bitmap,通过图片的宽高确定圆形图片的圆心半径等,再生成圆形的图片,主要代码如下 public Bitmap toRoundBitmap(Bitmap bitmap) { try { int width = bitmap.getWidth(); int height = bitmap.getHeight(); float roundPx; float left, top, right, bottom, dst_left, dst_top, dst_right, ds

压缩图片操作和生成圆形图片

1.对本地相册库或相机拍摄下来的图片进行压缩处理,传进来的参数分别有:要压缩的图片和压缩后的大小. //压缩图片 + (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize { // Create a graphics image context UIGraphicsBeginImageContext(newSize); // Tell the old image to draw in this ne

Linux下PHP自动生成文章预览图,html转换成各种格式图片、PDF-----转自phpboy的文章

原文地址:http://www.phpboy.net/linux/575.html 用WordPress建立博客站点,选择了一套可以显示文章缩略图的模板,几经折腾将原有模板改得面目全非,最后还是直接上线吧,不想折腾了. 站点上线没几天,在公司做项目时,对图片做了一个放大的JS,自己博客也加上点击缩略图查看原图的功能,然后迅速的加了. 过了几天,突发奇想,想做文章预览图,即点击缩略图查看文章预览图,也就是你们现在首页和文章列表页看到的那个功能. 不费话了,不知道什么时候又要折腾... Linux下

使用grunt对css中的background图片自动生成雪碧图

公司研发的系统为B/S架构,用户使用浏览器访问系统时,使用浏览器自带工具查看,对图片的请求数极多,多为小图片. 今天想对这个现状进行改善,网上查到一种雪碧图的方案,其实就是使用工具将数量很多的小图片拼成一张大图片,然后css里都引用这张大图片,并指定显示该图片的某一个区域,但这个方案需要手工作很多处理. 于是就想到能不能用目前比较成熟的grunt对前端样式文件自动进行处理,自动生成雪碧图,自动修改样式文件.一搜索果然找到了方案,下面为Gruntfile.js文件的片断: module.expor

如何生成圆形的图片

如何生成圆形的图片呢?今天就总结一下: 1.添加Photo.m和Phone.h两个文件 2.添加头文件Photo.h 3.创建圆角UIImageView self.headImageView = [[UIImageView alloc]initWithFrame:CGRectMake(124, 40, 72, 72)]; self.headImageView.layer.borderWidth = 2.0;//边宽 self.headImageView.layer.borderColor = [

RTImageAssets插件[email&#160;protected]可自动生成@2x图片

相关链接:https://github.com/rickytan/RTImageAssets RTImageAssets 是一个 Xcode 插件,用来生成 @3x 的图片资源对应的 @2x 和 @1x 版本,只要拖拽高清图到 @3x 的位置上,然后按 Ctrl+Shift+A 即可自动生成两张低清的补全空位.当然,如果你对图片质量要求不高的话,你也可以从 @2x 的图生成 @3x 版本. 附:Plugin Manager 安装 http://alcatraz.io/