Js利用Canvas实现图片压缩
Posted 好程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Js利用Canvas实现图片压缩相关的知识,希望对你有一定的参考价值。
最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。以下是具体实现:
/* * 图片压缩 * img 原始图片 * width 压缩后的宽度 * height 压缩后的高度 * ratio 压缩比率 */
function compress(img, width, height, ratio) { var canvas, ctx, img64; 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 方法外面,则可能压缩代码无效,或者会生成一张纯黑色的图片。
好程序员大数据二期班9月18日开班
本期优惠5000元
另外,好程序员郑重承诺:
学员毕业工资不过万,不收学费!
好程序员特训营自2014年开班至今,一直立志培养高薪,高能,高职的程序员人才,截至目前,好程序员学员就业均薪1万3以上,学员薪资最高达到2万9千元。现开设html5、JavaEE、大数据、android等高端精品课程,40人小班教学保证高品质,坚持100%全程面授。
好程序员,为高端而生
以上是关于Js利用Canvas实现图片压缩的主要内容,如果未能解决你的问题,请参考以下文章
HTML5 file API加canvas实现图片前端JS压缩并上传