使用ImageMagick从GIF的第一帧生成居中缩略图

时间:2016-03-18 19:01:19

标签: php imagemagick imagick

我有以下方法来生成缩略图。它需要任何尺寸并将其转换为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的第一帧生成缩略图,居中?

1 个答案:

答案 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文件的,也许是第二帧或第三帧而不是第一帧。