ImageMagick两个版本对imagick合成图片的一点差异

在使用ImageMagick的imagick库进行图片合成时,发现本地执行正常,但服务器上出现异常,未产生任何输出。问题根源在于不同版本的ImageMagick。通过获取版本信息($v = Imagick::getVersion()),揭示了版本差异对功能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


第一次听说imagick,然后使用,强大到任性,任性到手册上资料也少,合成一张图毕竟还是很容易的。


本地执行完全OK,到了服务器上,没有任何输出,一点小问题,来源于版本。

/**
     *  function: 合成图片
     * @param  string      $output_url 图片保存路径
     * @param  string      $img_type   图片保存类型
     * @param  integral    $line_num   每行显示图片数量
     * @param  array       $logo_info  每张待合成图片的信息(要求所有尺寸统一)
     * @param  array       $img_list  待合成的图片绝对路径
     * 
     * @return void
     */
    public function generate($output_url, $img_type, $line_num, $logo_info, $img_list=array()) {

        //计算图片有多少行
        $lines = ceil(count($img_list)/$line_num);

        $bg_width = ($logo_info['width'] + $logo_info['line_width']) * $line_num;
        $bg_height = ($logo_info['height'] + $logo_info['line_height']) * $lines;

        //构建画布
        $canvas = null;
        $canvas = new Imagick();
        $canvas -> newimage($bg_width, $bg_height, 'white');
        $canvas -> setimageformat($img_type);
        $i = $j = 0;
        foreach ($img_list as $item) {
        	$im = null;
            $im = new Imagick($item);
            $x = $logo_info['line_width']*2 + $i * $logo_info['width'];
            $y = $logo_info['line_height']*2 + $j * $logo_info['height'];
            
            // $canvas -> compositeimage($im, Imagick::COMPOSITE_OVER, $x, $y);
            $canvas -> compositeimage($im, $im->getImageCompose(), $x, $y);
 
            if (($i + 1) % $line_num === 0) {
                $i = 0;
                $j++;
            } else {
                $i++;
            }
            $im -> clear();
            $im -> destroy();
        }
        $canvas -> writeimage($output_url);
        $canvas -> clear();
        $canvas -> destroy();
    }

注意上面32行和43行:

$v = Imagick::getVersion(); 

 Array
(
    [versionNumber] => 1576
    [versionString] => ImageMagick 6.2.8 05/07/12 Q16 file:/usr/share/ImageMagick-6.2.8/doc/index.html
)
版本6.2.8合成失败,解决方案:
一、修改32行为:
 $canvas -> compositeimage($im, Imagick::COMPOSITE_OVER, $x, $y);
二、修改43行为:
 $canvas -> writeimages($output_url,true);

对于版本6.5以上问题都不存在,目前最新版本6.9


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值