canvas教程

移动网页html5的canvas画布生成缩略图的方法

字号+ 作者:H5之家 来源:H5之家 2017-11-14 15:22 我要评论( )

本文来讲讲移动端html5的canvas画布生成缩略图的方法,手机端的网站已经是趋势,而且现在网速也很快,打开图片分分钟,所以我们没有必要用后端生成物理图片了。

公司的移动页面, 上传图片时缩略图是靠后端生成, 但是随着现在的手机越来越牛X(摄像头比数码相机还厉害~), 图片体积也越来越大.

一个几M的图, 也许我们只是用来生成一个100*100的小图, 上传到后端再生成缩略图就大大的浪费了, 而且提交表单的等待时间也非长久, 对用户体验也不好.

普通的web表单, 上传图片靠后端来生成缩略图很平常, 但有了HTML5, 针对移动Web开发可以考虑使用前端生成缩略图了.

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

width: 生成缩略图的宽; height: 生成缩略图的高;
    fill: 图片小于缩略图尺寸时, 是否填充(false: 缩略图宽高自动缩放到适应图片, true: 缩略图尺寸不变)
    background:生成图片填充背景(默认#fff, 设置null时, 背景透明)
    type: 生成图片类型 ('image/jpeg' 或 'image/png')
    size: 生成缩略图方式, 生成缩略图的效果主要参考了CSS3的background-size属性:
      contain: 等比缩放并拉伸, 图片全部显示;
      cover: 等比缩放并拉伸, 图片把容器完全覆盖;
      auto: 图片不拉伸, 居中显示.
    mark: 水印
      文字水印: mark = {padding: 5, height: 18, text: 'test', color: '#000', font: '400 18px Arial'}
      图片水印: mark = {padding: 5, src: 'mark.png', width: 34, height: 45};
    stretch: 小图是否强制拉伸以适应缩略图的尺寸(size = auto/contain时)
    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, 一个用来读取本地图片, 一个用来生成缩略图.

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

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • html5学习:使用canvas画曲线

    html5学习:使用canvas画曲线

    2017-09-16 17:08

  • html5学习笔记6 canvas

    html5学习笔记6 canvas

    2017-08-14 09:45

  • html5学习之路(Canvas画布1)

    html5学习之路(Canvas画布1)

    2017-07-11 13:02

  • HTML5 canvas圆形气泡动画背景插件

    HTML5 canvas圆形气泡动画背景插件

    2017-06-04 13:00

网友点评