解决阿里云图片超过20M无法缩放的问题

如题,oss在处理图片能力不足,高清无损放大他们办不到,超标图片缩小也办不到。可惜了丢。
当上传至阿里云的图片为32M 时,虽然可以上传成功,但使用阿里云的插件 ,例如缩小到50%,在图片后面追加?x-oss-process=image/resize,p_50会报一个错误:Maximal size of image supported is 20971520

原因是阿里云不处理超过20M 以上的图片,fuckAliyun,那么我们需要在上传图片之前进行限制:

//当上传的图片超过20M 按最大边6000进行压缩
        if ($size['size'] >= 20000000) {
    
    
            $ai = new \Imagick($filePath);
            $ai->thumbnailImage(6000, 6000,true);
            $path = "/product/" . md5(rand(1, 9999999) . microtime()) . '.' . $ext;
            $ai->writeImage(ROOT_PATH . '/public' . $path);
            $filePath = ROOT_PATH . '/public' . $path;
            $size['size'] = filesize($filePath);
        }

当图片尺寸超过20M 后,我们需要按最大边某个值例如6000,进行等比例压缩。上图的thumbnailImage(6000, 6000,true)意思是如果宽比高大,则按最大宽度6000px 来等比压缩,反之同理。不带true的话会按设定值压缩。

经过比对,压缩后的图片清晰度不会丢失。我们刚尝试了一张阿里云图片32M压缩到12M 的例子。当图片达到20M以下时就可以使用阿里云的图片限定插件了。

例如:

将原图:

(按宽500等比例缩放)
http://img.321.design/gallery/f9be8202010260903458884.jpg?x-oss-process=image/resize,w_500

(按最大边500等比例缩放)
http://img.321.design/gallery/f9be8202010260903458884.jpg?x-oss-process=image/resize,l_500

(按图片放大多少倍,以下为原图500像素放大3.2倍的两种方式):?x-oss-process=image/resize,p_320 或者
?x-oss-process=image/resize,w_1600,limit_0

猜你喜欢

转载自blog.csdn.net/weixin_42433970/article/details/110124417