- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想了解如何从动画 GIF 中删除帧。
目前我正在尝试这个(作为测试):
$count = 1;
foreach ($_im AS $frame) {
if ($count > 1) { $frame->removeImage(); }
$count++;
}
然而,这似乎让对象中的所有东西都 toast 了。
同事的建议是创建另一个 IM 对象,然后将名人提取到其中,等等。但这看起来非常困惑。
最佳答案
我一直在浏览 Imagick
一段时间的文档,并尝试了一些事情......但我也没有设法做你想要的 - 所以,我们至少有两个人找不到干净的方法^^
无论如何,我设法删除动画 GIF 图像帧的唯一方法是创建一个新帧,其中只包含我不想删除的帧:-(
考虑到我以这种方式加载图像:
// Load the existing image
$image = new Imagick(dirname(__FILE__) . '/animated-gif-source.gif');
(这是一个动画 gif,有 3 帧;我想“删除”第二帧)。
正如我所说,我发现“删除框架”的唯一方法是这个:
$new_image = new Imagick();
$i = 1;
foreach ($image as $frame) {
if ($i===1 || $i===3) {
// 3 frames ; we keep the first and third one
// ie, remove the second one
$new_image->addImage($frame->getImage());
}
$i++;
}
所以:
最后,将图像输出到浏览器:
// To directly output to the browser
header('Content-Type: image/gif');
echo $new_image->getImagesBlob();
或者,将其写入文件:
// To write the new image to a file
// Must use writeImages, and not writeImage (multi-frames ! )
$new_image->writeImages(dirname(__FILE__) . '/animated-gif-output.gif', true);
这些输出中的每一个仅包含第一帧和第三帧;所以,它的工作...
但是,正如你所说,感觉不太好:-(
我认为它可能适用于大多数图像;您可能会遇到大图像的问题,但动画 GIF 通常没有那么大...是吗?
其他方法可能是从命令行使用转换...但是...不是很好,而且我没有找到一种方法来删除那些 :-(
关于php - 想象 : Remove frames from an animated GIF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1192877/
我正在使用 PHP Imagick 来处理图像。 我有两个用例:“调整大小”和“裁剪”。 在“调整大小”中,如果原始图像的尺寸小于给定的宽度和高度,我不希望 Imagick 将其放大,而是希望它简单地
当尝试从 PHP 进行简单的转换时,我收到此错误: exception 'ImagickException' with message 'wand contains no images `Magick
我想了解如何从动画 GIF 中删除帧。 目前我正在尝试这个(作为测试): $count = 1; foreach ($_im AS $frame) { if ($count > 1) { $f
我正在处理 Sylius 1.5 项目,在我的本地环境中一切正常,但是在部署到我的开发环境时,我在过滤图像上遇到错误(使用 liip 想象过滤器)。 该环境由一个运行 sylius 的 docker
我是一名优秀的程序员,十分优秀!