imagick 等比缩放图片,保持规定尺寸

    /**
     * 通过Imagick创建图片的缩略图
     *
     * @access  public
     * @param   string      $img    原始图片的路径
     * @param   int         $thumb_width  缩略图宽度
     * @param   int         $thumb_height 缩略图高度
     * @param   strint      $path         指定生成图片的目录名
     * @return  mix         如果成功返回缩略图的路径,失败则返回false
     */
    function make_thumb_by_imagick($img, $thumb_width = 0, $thumb_height = 0, $path = '', $bgcolor = '') {    
        $im = new Imagick():
        $new_im = $im->clone();
        $im->readImage($img);
        $im->setCompression(Imagick::COMPRESSION_JPEG);
        $im->setCompressionQuality(IMAGE_QUALITY); // 设置图片品质
        $srcImage = $im->getImageGeometry(); //获取源图片宽和高 
        //图片等比例缩放宽和高设置 ,根据宽度设置等比缩放 
        $scale_org = $srcImage['width'] / $srcImage['height'];
        if ($srcImage['width'] / $thumb_width > $srcImage['height'] / $thumb_height) {
            $newX = $thumb_width;
            $newY = $thumb_width / $scale_org;
        } else {
            /* 原始图片比较高,则以高度为准 */
            $newX = $thumb_height * $scale_org;
            $newY = $thumb_height;
        }

        $im->thumbnailImage($newX, $newY);  //按照比例进行缩放
        // 按照缩略图大小创建一个有颜色的图片 
        $new_im->newImage($thumb_width, $thumb_height, $bgcolor, 'jpg');
        //合并图片 
        $new_im->compositeImage($im, imagick::COMPOSITE_OVER, ($thumb_width - $newX) / 2, ($thumb_height - $newY) / 2);

        /* 创建当月目录 */
        if (empty($path)) {
            $dir = ROOT_PATH . $this->data_dir . '/' . date('Ym') . '/';
        } else {
            $dir = ROOT_PATH . $this->data_dir . '/' . $path . '/';
        }

        /* 如果目标目录不存在,则创建它 */
        if (!file_exists($dir)) {
            if (!make_dir($dir)) {
                /* 创建目录失败 */
                $error_msg = sprintf($GLOBALS['_LANG']['directory_readonly'], $dir);
                $error_no = ERR_DIRECTORY_READONLY;
                return false;
            }
        }
        /* 如果文件名为空,生成不重名随机文件名 */
        $filename = $this->unique_name($dir);
        $filename = $filename . ".jpg"; //jpg图片
        //生成JPG图片; 
        $new_im->writeImage($dir . $filename);
        //清空图片内存
        $im->clear();
        $new_im->clear();
        $im->destroy();
        $new_im->destroy();

        //确认文件是否生成
        if (file_exists($dir . $filename)) {
            return str_replace(ROOT_PATH, '', $dir) . $filename;
        } else {
            $error_msg = $GLOBALS['_LANG']['writting_failure'];
            $error_no = ERR_DIRECTORY_READONLY;

            return false;
        }
    }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值