我有以下方法来生成缩略图。它需要任何尺寸并将其转换为600 x 450图像,居中。
private function generateThumbnail ($ext, $name) {
if ($ext === ".png"){
exec('convert -define png:size=1200x900 '.$this->file.' -thumbnail 600x450^ -gravity center -extent 600x450 '.$name);
exec("optipng -o2 -q " . $name);
} else {
exec('convert -define jpeg:size=1200x900 '.$this->file.' -thumbnail 600x450^ -gravity center -extent 600x450 '.$name);
$img = new Imagick($name);
$img->setImageCompression(Imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(97);
$img->stripImage();
$img->writeImage($name);
$img->destroy();
}
}
从GIF生成缩略图时出现问题。它不会从第一帧生成图像。一个GIF只有一个空白图像(透明),另一个有奇怪的颜色/质量。
如何在GIF的第一帧生成缩略图,居中?
答案 0 :(得分:0)
您可以使用API执行它们,但我不使用它,因为它是有限的。但看起来你仍然需要使用optipng程序的命令行,所以我会继续使用命令行。
无论如何回到你的问题;你怎么知道gif的第一帧不是透明图像还是奇怪的图像?
正如@Mark Setchell所说,您应该能够使用input.gif [0]指定一个特定的框架,我会尝试使用不同的编号,看看你得到了什么。 我不是动画使用,但你应该能够看到带有-coalesce的gif帧。安东尼在他的网站上有一些例子:http://www.imagemagick.org/Usage/anim_basics/#coalesce 这应该让你知道gif中的帧:
montage script_k.gif -coalesce \
-tile x1 -frame 4 -geometry '+2+2' \
-background none -bordercolor none coalesce_k_montage.gif
你可以看到你是如何制作gif文件的,也许是第二帧或第三帧而不是第一帧。