【问题标题】:Generate centered thumbnail from first frame of GIF with ImageMagick使用 ImageMagick 从 GIF 的第一帧生成居中的缩略图
【发布时间】:2016-03-18 19:01:18
【问题描述】:

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

【问题讨论】:

  • 只是一个问题,但我想知道为什么你从 Imagemagick 开始使用 exec() 和命令行然后放入 Imagick API。
  • 不确定我理解你为什么将命令行与 Imagick 混合,但一般来说,你可以在文件名后面的方括号中指定帧号,所以对于 GIF 的第一帧,你会使用 @ 987654322@.
  • @Bonzo 我不确定您是否可以使用 API 执行命令行操作,因为我在 SO 上使用命令行找到了答案。

标签: php imagemagick imagick


【解决方案1】:

您可能可以使用 API 来完成它们,但我不使用它,因为它是有限的。但看起来你仍然需要为 optipng 程序使用命令行,所以我会继续使用命令行。

还是回到你的问题;你怎么知道gif的第一帧不是透明图还是奇怪图?

正如@Mark Setchell 所说,您应该能够使用 input.gif[0] 指定特定的帧,我会尝试使用不同的数字,看看您会得到什么。 我不是动画用户,但您应该能够使用 -coalesce 看到 gif 帧。 Anthony 在他的网站上有一些例子: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 文件是如何制作的,并且可能会转到第二帧或第三帧而不是第一帧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 2011-07-04
    • 2014-06-21
    • 1970-01-01
    • 2014-11-26
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多