Imagemagick:在Windows上保存动画gif,但不保存Ubuntu

时间:2014-02-11 04:38:15

标签: php windows ubuntu imagemagick imagick

我正在使用ImageMagick和Imagick来处理图像。我使用Windows 7和Ubuntu 12.04作为测试环境。目前,我正在尝试处理动画.gif图像。在Windows中,动画保存并且没有问题,但在Ubuntu中,图像只保存第一帧。它保存为.gif图像,但不是动画。

ImageMagick和Imagick是我在GD上的首选图像处理库,过去我和他们做了很多相关的工作;所以我非常熟悉他们的工作方式。我知道Windows中的“writeImages()”只能使用绝对路径,但它在Ubuntu中可以使用相对或绝对路径。

我对使用命令行exec php函数并不感兴趣,我宁愿使用Imagick库。

我已经没想完了。有没有其他人遇到过类似的问题?我已经为此工作了大约一个星期。我错过了一些明显的东西,还是我发现了一个错误?

这是功能:

// Re-sizes images //
function resize($file_src) {
    try {
        // Set bigger time limit for bigger gifs //
        set_time_limit(180);
        // Original Image //
        $image = new Imagick($file_src);
        // Destination to save to //
        $destination = dirname(__FILE__) . DS . 'images' . DS . basename($file_src);
        // Set the re-size values //
        $size_w = 250;
        $size_h = 250;
        // Separate the frames //
        $images = $image->coalesceImages();
        // Loop through each frame and resize //
        foreach ($images as $frame) {
            $frame->thumbnailImage($size_w, $size_h);
        }
        // Save the images to a single file //
        $images->writeImages($destination, true);
    } catch (Exception $e) {
        echo $e->getMessage();
    }
}

// Image in base dir //
$image = 'original.gif';

// resize image and send to image dir //
resize($image);

在Windows中,我的ImageMagick版本是:

convert -version
Version: ImageMagick 6.8.1-8 2013-01-02 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
Features: OpenMP
Delegates: bzlib freetype jp2 jpeg lcms lzma ps tiff x xml zlib

在Ubuntu中,版本是:

convert -version
Version: ImageMagick 6.8.7-0 2013-10-11 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
Features: DPC OpenMP
Delegates: zlib

编辑:

我最终在github上向Imagick提交了一个错误报告。我重写了在命令行上工作的函数,它完美无缺。如果有人有兴趣,这是重写的功能。

<?php

function resize_cmd($file_src) {
    set_time_limit(180);
    $destination = dirname(__FILE__) . DS . 'images' . DS . basename($file_src);
    $w = 250;
    $h = 250;

    exec("convert {$file_src} -coalesce -resize {$h}x{$w} {$destination}", $output);

    if (!empty($output)) {
        echo $output;
    }
}

?>

Here是我报告的错误。

0 个答案:

没有答案