HTML5技术

Js利用Canvas实现图片压缩 - similar

字号+ 作者:H5之家 来源:H5之家 2017-09-12 12:00 我要评论( )

最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。以下是具体实现: /* * 图片压缩 * img原始图片 * width压缩后的宽度 * height 压缩后的高度 * ratio压缩比

最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。以下是具体实现:

 

/* * 图片压缩 * img 原始图片 * width 压缩后的宽度 * height 压缩后的高度 * ratio 压缩比率 */ function compress(img, width, height, ratio) { var ctx, img64; var canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, width, height); img64 = canvas.toDataURL("image/jpeg", ratio); return img64; }

 

上面是一个图片压缩函数,返回 base64 格式的图片数据。 其中压缩比率取值(0 - 1 之间)越大图片质量越高。建议不要将图片转为 png 格式,因为转为 png 格式,图片的 base64 比转为 jpeg 的要长不少。下面是实际调用:

 

var image = new Image(); image.src = "/img/test.jpg"; image.onload = function(){ var img64 = compress(image, 500, 400, 0.7); document.getElementById("test").src = img64; }

 

注意: 压缩方法的调用以及图片src赋值必须放在图片的 onload 方法里面。因为只有等图片加载完成后才能进行压缩处理,从而转换为base64 进行赋值。 如果放在 onload 方法外面,则可能压缩代码无效,或者会生成一张纯黑色的图片。

 

 

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

相关文章
  • websocket实现简单聊天程序 - bingo咖咖

    websocket实现简单聊天程序 - bingo咖咖

    2017-09-13 08:09

  • js封装成插件-------Canvas统计图插件编写 - 蒋世超

    js封装成插件-------Canvas统计图插件编写 - 蒋世超

    2017-09-12 09:00

  • Canvas贪吃蛇 - 紫菜、

    Canvas贪吃蛇 - 紫菜、

    2017-09-08 11:10

  • Canvas时钟 - 紫菜、

    Canvas时钟 - 紫菜、

    2017-09-05 16:00

网友点评
h