我正在使用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是我报告的错误。