• 压缩图片 待验证


        
        /**
         * @desc 压缩图片
         * @param string $src 图片源地址(全路径)
         * @param int $dst_w 目标宽度
         * @param int $dst_h 目标高度
         * @param string $dst 目标地址(全路径) 如果指定,则把缩放后的图片直接写入到$dst指定的路径;否则则返回图片的二进制值
         * @param boolean $isHold 是否锁定原图的高宽比。如果false(不锁定),则严格按照指定的$dst_w和$dst_h生成新的图片
         * @param string $format 缩放后图片的格式。如果不指定,则使用原图的格式
         * @return InternalResultTransfer
         */
        static function compress($src, $dst_w, $dst_h, $dst = null, $isHold = false, $format = null) {        
            if (empty($src)) {
                return ResultWrapper::fail("请指定原图");
            }
            if (!file_exists($src)) {
                return ResultWrapper::fail("{$src} 该图片文件不存在");
            }
            
            $objImagick = new Imagick();
            $objImagick ->readImage($src);
            if ($isHold) {
                $src_h = $objImagick->getImageHeight();
                $src_w = $objImagick->getImageWidth();
                /// 源图片比目标图片要小
                if ($src_w < $dst_w && $src_h < $dst_h) {
                    $hratio = $dst_h / $src_h;
                    $wratio = $dst_w / $src_w;
                    $ratio = $hratio < $wratio ? $hratio : $wratio;
                    $dst_h = $src_h * $ratio;
                    $dst_w = $src_w * $ratio;
                    $isHold = false;
                }
            }
            $objImagick->resizeImage($dst_w, $dst_h, Imagick::FILTER_CATROM, 1, $isHold);
    
            if (is_null($format)) {
                $format = $objImagick->getImageFormat();
            }
            $objImagick->setImageFormat($format);
            // 压缩
            $objImagick->setImageCompression(Imagick::COMPRESSION_JPEG);
            $a = $objImagick->getImageCompressionQuality() * 0.75;
            if ($a == 0) {
                $a = 75;
            }
            $objImagick->setImageCompressionQuality($a);
            $objImagick->stripImage(); // Strips an image of all profiles and comments
            
            if (is_null($dst)) {// 返回图像内容
                $data = $objImagick->getImageBlob();
                $ret = ResultWrapper::success($data);
            } else {
                $tmpWriteResult = $objImagick->writeImage($dst);
                if ($tmpWriteResult) {
                    $ret = ResultWrapper::success(array(
                        'w' => $objImagick->getImageWidth(),
                        'h' => $objImagick->getImageHeight(),
                    ));
                } else {
                    $ret = ResultWrapper::fail("写入目标地址失败");
                }
            }
            $objImagick->clear(); // Clears all resources associated to Imagick object
            $objImagick->destroy();
            return $ret;
        }
  • 相关阅读:
    thinkphp 学习1-模型
    apache 2.4目录权限
    标头 header()函数的用法
    PHP面试题一
    php学习
    如何执行超过一百兆(100MB)的sql脚本?
    jquery-numberformatter插件
    xpath 获取父级,和同级
    Vue el-table 行编辑验证、重置
    Vue 弹窗一个新增编辑页面
  • 原文地址:https://www.cnblogs.com/bandbandme/p/6106084.html
Copyright © 2020-2023  润新知