PHP ImageMagick 在每一帧动画 Gif 中改变颜色

Posted

技术标签:

【中文标题】PHP ImageMagick 在每一帧动画 Gif 中改变颜色【英文标题】:PHP ImageMagick change color in every frame Animated Gif 【发布时间】:2019-07-25 02:21:37 【问题描述】:

我正在尝试将动画 GIF 中的 RGB 值更改为另一个 RGB 值。然而,在我所有的尝试中,它只是改变一帧而不是所有帧的颜色。

$imgif = new Imagick(HOME_PATH.'/images/6.gif');
$target = 'rgba(238,131,41, 1.0)';
$fill = 'rgba(163,145,144, 1.0)';
$fuzz = 0.05 * $imgif->getQuantumRange()['quantumRangeLong'];
$imgif->opaquePaintImage($target, $fill, $fuzz, false, Imagick::CHANNEL_DEFAULT);

$imgifblob = $imgif->getImagesBlob();

是否可以为整个 GIF 索引颜色并进行更改?我很迷茫,因为我没有太多图像处理经验。

【问题讨论】:

【参考方案1】:

抱歉,我不太了解 Imagick。但这里是如何在 Imagemagick 命令行中执行此操作。您可能必须在 Imagick 中循环遍历每一帧,因为它可能不允许处理多帧图像。但也许使用 readImages 会起作用。请参阅https://www.php.net/manual/en/imagick.readimages.php,您将 gif 中的所有帧指定为 6.gif[0--1],即从第 0 帧到最后一帧 -1 的所有帧。对不起,我只是不知道。 Imagick 专家可能会提供更多帮助。

输入:

convert bunny_anim.gif -coalesce -fuzz 10% -fill red -opaque "rgb(51,77,204)" -layers optimize new_bunny.gif

【讨论】:

以上是关于PHP ImageMagick 在每一帧动画 Gif 中改变颜色的主要内容,如果未能解决你的问题,请参考以下文章

使用PythonOpenCV,ImageMagick工具箱根据原始视频制作GIF动画

在每一帧上更新整个 VBO 是绘制许多变化的独特三角形的最有效方法吗?

PHP使用ImageMagick操作gif图

PHP使用ImageMagick操作gif图

如何使用 ImageMagick (php) 调整动画 gif 的大小?

这是绘制许多不同的动态 3D 模型的最优化和正确的方法(它们是动画的并且每一帧都会改变)