php 图片压缩

妖精的绣舞 提交于 2020-08-08 09:49:18

注: 代码取自网上

1.依赖 php 扩展 php-imagick

 2.压缩原理:

         1)读取图片内容,对图片进行裁剪或者缩放;

         2)再转化为jpg(jpeg)进行数据量压缩:jpg(jpeg)都支持压缩率(GD库也支持)

    /**
     * @param $image string  图片内容file_get_contens stream_get_contens
     * @param $width int 图片宽 阈值
     * @param $height  int 图片高 阈值
     * @param $crop  bool 如果图片宽或者高度超过上面的阈值,将进行 true:裁剪  false 缩放
     * @return array [string, 'jpg'] 正常返回处理后的图片内容,可以直接存为jpg
     */  
function custom_resize($image, $width, $height, $crop = false) {
        try{
            $imagick = new Imagick();

            $imagick->readImageBlob($image);

            $w = $imagick->getImageWidth();
            $h = $imagick->getImageHeight();

            if ($w > $width || $h > $height) {
                if ($crop) {//裁剪
                    $imagick->cropThumbnailImage($width, $height);
                } else {//缩放
                    $imagick->resizeImage($width, $height, Imagick::FILTER_CATROM, 1, true);
                }
            }

            $imagick->setImageFormat('JPEG');
            $imagick->setImageCompression(Imagick::COMPRESSION_JPEG);

            $a = $imagick->getImageCompressionQuality() * 0.75;
            $a == 0 && $a = 75;
            $imagick->setImageCompressionQuality($a);

            $imagick->stripImage();

            $blob = $imagick->getImageBlob();

            $imagick->clear();
            $imagick->destroy();

            return [$blob, 'jpg'];
        }catch (ImagickException $e){
            Log::warning('imagick-resize-failed', ['err' => $e->getMessage()]);
            return ['', ''];
        }

    }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!