收藏
回答

小程序h5图片压缩问题(紧急求取,老板只给24小时,夺命call)

请教各位大神,本人有个项目在小程序中运行h5页面,需要使用h5进行图片压缩,目前大量用户遇到了安卓上压缩后的图片是黑图(设置底色为白色),ios上传的是白图,部分oppo手机的图片为上半张图正常,下半张图类似绿色蒙层,源码如下:

let canvas = document.createElement("canvas");

let ctx = canvas.getContext('2d');

let initSize = img.src.length;

let width = img.width;

let height = img.height;

//如果图片大于四百万像素,计算压缩比并将大小压至400万以下

let ratio;

if ((ratio = width * height / 4000000) > 1) {

ratio = Math.sqrt(ratio);

width /= ratio;

height /= ratio;

} else {

ratio = 1;

}

canvas.width = width;

canvas.height = height;

//        铺底色

ctx.fillStyle = "#fff";

ctx.fillRect(0, 0, canvas.width, canvas.height);

//如果图片像素大于100万则使用瓦片绘制

let count;

if ((count = width * height / 1000000) > 1 && Util.isIOS()) {

count = Math.ceil(Math.sqrt(count)); //计算要分成多少块瓦片

//            计算每块瓦片的宽和高

var nw = ~~(width / count);

var nh = ~~(height / count);

//    瓦片canvas

for (var i = 0; i < count; i++) {

for (var j = 0; j < count; j++) {

let tCanvas = document.createElement("canvas");

let tCtx = tCanvas.getContext("2d");

tCanvas.width = nw;

tCanvas.height = nh;

tCtx.drawImage(img, Math.ceil(i * nw * ratio), Math.ceil(j * nh * ratio), Math.ceil(nw * ratio), Math.ceil(nh * ratio), 0, 0, nw, nh);

ctx.drawImage(tCanvas, i * nw, j * nh, nw, nh);

}

}

} else {

ctx.drawImage(img, 0, 0, width, height);

}

let data = canvas.toDataURL('image/jpeg', 0.7);


跪谢各位大神,急急急!!!


回答关注问题邀请回答
收藏

26 个回答

  • Hasaki
    Hasaki
    2018-10-24

    凉了吗?

    2018-10-24
    有用
    回复
  • 小易
    小易
    2018-10-24

    感觉也是内存问题吧,小程序里面直接用 Canvas 处理一个 1000*1000 的图片基本就会崩溃了,小程序里面 web-view 打开 H5 页面做 Canvas 处理应该也差不多吧

    2018-10-24
    有用
    回复 1
    • kliwin
      kliwin
      2018-10-24

      oppo手机拍出来六千多万像素的照片是能成功压缩的

      2018-10-24
      回复
  • 2018-10-24

    canvas 的区域如果你的算法没有问题应该是不会出现一半是好的 一半是错的 应该是你截取的 区域有问题把?

    2018-10-24
    有用
    回复 1
    • kliwin
      kliwin
      2018-10-24

      目前可以确定的是oppo手机的超清画质的图片会有一半好一半坏的问题

      2018-10-24
      回复
  • 阿北哥ya
    阿北哥ya
    2018-10-24

    这个不能交给后台处理了,然后返回给h5.

    2018-10-24
    有用
    回复 1
    • kliwin
      kliwin
      2018-10-24

      可以,不过现在改来不及

      2018-10-24
      回复
  • 双洋湖批发部
    双洋湖批发部
    2018-10-24

    借楼问下申请小程序最后一步怎么付款那个0.87元

    2018-10-24
    有用
    回复 1
    • kliwin
      kliwin
      2018-10-24

      这个要问客服

      2018-10-24
      回复
  • 天蓝
    天蓝
    2018-10-23

    楼主有结果了吗?我也遇到同样的问题,在线等,急!!!!

    2018-10-23
    有用
    回复 1
    • kliwin
      kliwin
      2018-10-23

      坐等社区大神解答,尝遍了奇技淫巧

      2018-10-23
      回复

正在加载...

登录 后发表内容