html5 canvas 前端生成缩略图

html5 canvas
前端生成缩略图

更新
2013/08/01: 解决了后面遇到的bug: 图片被压扁(IOS6);
图片被旋转; 
整个源码放在:
https://github.com/kairyou/html5-make-thumb 
新方案需要后面实现的,
就是下面的旧版本里的功能(水印/是否强制拉伸以适应目标尺寸等功能).

w3ctech长沙站交流会, 里面分享的PPT:
http://www.slideshare.net/99leon/html5-create-thumbnail

之前有bug的版本放在分支old里(不推荐使用),
请使用更新的方案~

2013/01/07:
11年做的公司的移动页面,
上传图片时缩略图是靠后端生成, 但是随着现在的手机越来越牛X(摄像头比数码相机还厉害~), 图片体积也越来越大.
一个几M的图,
也许我们只是用来生成一个100*100的小图, 上传到后端再生成缩略图就大大的浪费了, 而且提交表单的等待时间也非长久,
对用户体验也不好.
普通的web表单, 上传图片靠后端来生成缩略图很平常,
但有了HTML5, 针对移动Web开发可以考虑使用前端生成缩略图了.

写了个生成缩略图的jquery的插件, 主要参数:

  1. width:生成缩略图的宽; height:生成缩略图的高;

  2. fill:图片小于缩略图尺寸时,是否填充(false:缩略图宽高自动缩放到适应图片,true:缩略图尺寸不变)

  3. background:生成图片填充背景(默认#fff,
    设置null时, 背景透明)

  4. type:生成图片类型(‘image/jpeg‘或‘image/png‘)

  5. size:生成缩略图方式,生成缩略图的效果主要参考了CSS3的background-size属性:

  6. contain:等比缩放并拉伸,图片全部显示;

  7. cover:等比缩放并拉伸,图片把容器完全覆盖;

  8. auto:图片不拉伸,居中显示.

  9. mark:水印

  10. 文字水印: mark ={padding:5,
    height:18, text:‘test‘,
    color:‘#000‘, font:‘400 18px Arial‘}

  11. 图片水印: mark ={padding:5,
    src:‘mark.png‘, width:34, height:45};

  12. stretch:小图是否强制拉伸以适应缩略图的尺寸(size =auto/contain时)

  13. success:生成缩略图后 callback

大体思路如下:
首先判断是否支持fileReader(支持fileReader,
canvas就不在话下了)
不支持的话: 不做任何操作, 默认的input
type="file"上传, 靠后端生成缩略图.
支持的情况: input
change时, 判断选择的文件是图片, 就创建一个隐藏的canvas, 并把图片画到canvas里,
因为要生成缩略图,
所以在canvas里画图的时候, 控制剪切坐标和被剪切的宽高就OK了.
另外可以加上水印, 图片水印或者文字水印加到canvas上面也是比较方便的.
最后 canvas.toDataURL 转成base64, post到后端(先把input
type="file"移除, 再生成个新的input type="hidden"储存图片数据),
后端接收后直接保存为图片就OK了.
主要用到:
FileReader和canvas, 一个用来读取本地图片, 一个用来生成缩略图.

做移动网页开发的同学可以考虑下.

转自:http://www.fantxi.com/blog/archives/create-thumbnail-images-html5/

html5 canvas 前端生成缩略图,布布扣,bubuko.com

时间: 2024-10-10 22:01:07

html5 canvas 前端生成缩略图的相关文章

HTML5 canvas粒子生成人物面部轮廓插件

这是一款使用js制作的HTML5 canvas粒子生成人物面部轮廓插件.该js插件可以扫描图片中的人物面部阴暗和高亮面,并生成canvas也能够圆点来描绘出脸部轮廓.还可以用鼠标来和粒子进行互动. 该插件不需要使用高分辨率的图片.但是图像必须放在相同域名的服务器上,由于安全原因,跨域名的图片不能在CANVAS中使用,查看Security with canvas elements. 在线演示:http://www.htmleaf.com/Demo/201502011309.html 下载地址:ht

利用html5 canvas实现纯前端上传图片的裁剪

今天跟大家分享一个前端裁剪图片的方法.许多网站都有设置用户头像的功能,用户可以选择一张本地的图片,然后用网站的裁剪工具进行裁剪,然后设置大小,位置合适的头像.当然,网上也有一些用js写的诸如此类裁剪的插件,但是有许多都是前端将图片的一些裁剪参数(如坐标)传给后台,有java程序员进行真正的图片裁剪.今天自己研究了一些,做了一个纯前端裁剪的demo,如下: 1.html部分:<div> <input type="file" id="imgFile"&

【猪猪-前端】微信打飞机高质量Demo,学习HTML5+Canvas技术编写,下载即可使用,注释齐全。

原文:[猪猪-前端]微信打飞机高质量Demo,学习HTML5+Canvas技术编写,下载即可使用,注释齐全. 源代码下载地址:http://www.zuidaima.com/share/1553027668610048.htm //获取绘图环境 02 var canvas=document.getElementById('canvas'); 03 var context=canvas.getContext('2d'); 04   05   06 //创建对象集合 (集合所有精灵) 07 var 

前端-HTML5 canvas学习

canvas元素算是HTML5添加的最受欢迎的功能了.它是通过在页面中设定一个区域,然后用脚本来编辑图形. 可像下面这样来引入一个canvas图像 <canvas id="myCanvas"></canvas> <script type="text/javascript"> var canvas = document.getElementById('myCanvas'); var cxt = canvas.getContext('

基于HTML5 Canvas生成粒子效果的人物头像

前面我们分享过一个HTML5 Canvas实现的图像马赛克模糊效果,HTML5处理图片真的非常简单.今天我们要再利用HTML5 Canvas实现一个粒子效果的人物头像,你可以任意选择一张头像图片,接下来该图片会被打散成许多粒子,然后慢慢的重组成图片,鼠标滑过图片时粒子还会出现浮动的动画特效,看上去非常酷. 在线预览   源码下载 HTML代码如下 <p class="center">Change pixel resolution <input type="r

前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例

HTML5 动画在Canvas 上得到了充分的发挥,我们 VIP 视频也分享过很多相关的动画特效制作视频,这次给大家带来 6 款超炫酷的HTML5 canvas 动画的 demo,一起来看看吧~ 文内附有时钟效果代码 demo 下载地址,感兴趣的小伙伴们可以收藏一下. 1 超绚丽的 HTML5 地图分布动画 这是一款基于 HTML5 的地图应用,但它不同的地方在于它主要是在地图上实现分布动画,可以利用这款插件实现各个地区之间的客流流向,给人非常直观的数据展现. 2 鼠标滑过粒子挤压动画 粒子动画

html5 canvas 详细使用教程

导航 前言 基本知识 绘制矩形 清除矩形区域 圆弧 路径 绘制线段 绘制贝塞尔曲线 线性渐变 径向渐变(发散) 图形变形(平移.旋转.缩放) 矩阵变换(图形变形的机制) 图形组合 给图形绘制阴影 绘制图像(图片平铺.裁剪.像素处理[不只图像.包括其他绘制图形]) 绘制文字 保存和恢复状态(context) 保存文件 结合setInterval制作动画 结语.demo下载   前言 <canvas></canvas>是html5出现的新标签,像所有的dom对象一样它有自己本身的属性.

如何使用 HTML5 Canvas 制作水波纹效果

原文:如何使用 HTML5 Canvas 制作水波纹效果 今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javascript 就可以创建一个很有趣的解决功能. 在线演示      源码下载 Step 1. HTML 和以前一样,首先是 HTML 代码: <!DOCTYPE html> <html> <head> <meta

使用html5+canvas+Jquery实现的纯代码连线题Demo

前端一直是令众等小牛们胆怯的领域,但一旦涉足,技术自然也是蹭蹭蹭的往上涨,荷包也就自然的bingo了. 然而在这万千世界加之资料满街撒的时代,却仍然在我们开发过程中总有那么一丢丢的技术点难以找到合适自身的demo,故而引发了众生牛牛们的不满和抱怨,于是乎苦逼的从后端到前端的探险历程,走上了一条漫漫人生路. 随着我们业务应用场景的广泛化,衍生了众多华丽的前端艺术及产品,接下来则分享一份使用html5+canvas实现的草稿版连线题demo,希望有助于奋斗在一线前端的开发人员们,也多多提供一些改良意