调整动画GIF文件大小而不破坏动画

ria*_*iad 45 php image imagemagick animated-gif

我需要在不破坏动画的情况下调整动画GIF文件的大小.

我怎么能用PHP做到这一点?

Jer*_*ley 58

如果你有imagemagick访问权限,你可以这样做:

system("convert big.gif -coalesce coalesce.gif");
system("convert -size 200x100 coalesce.gif -resize 200x10 small.gif");
Run Code Online (Sandbox Code Playgroud)

如果您没有system()访问权限,则很可能使用imagemagick插件

注意:这可能会创建一个更大的文件大小,尽管较小的尺寸图像由于合并基本上不优化图像.

更新: 如果您没有ImageMagick访问权限,您应该能够使用以下步骤的组合来调整动画gif的大小(假设您具有GD访问权限):

  1. 检测图像是否是动画gif:我可以使用php和gd检测GIF动画吗?(回答)
  2. 将动画gif拆分为单独的框架:http://www.phpclasses.org/package/3234-PHP-Split-GIF-animations-into-multiple-images.html
  3. 调整各个框架的大小:http://www.akemapa.com/2008/07/10/php-gd-resize-transparent-image-png-gif/
  4. 将帧重新组合成动画gif:http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html

这肯定比ImageMagick路线密集得多,但它在技术上应该是可行的.

如果您使用它,请与世界分享!

  • 我认为我的理论只是在实践中工作:http://forssto.com/gifexample/ (9认同)

che*_*vim 11

您需要将gif分解为帧,缩略图和重新组合.

看看ImageMagick本教程.


nut*_*nut 11

试试GDEnhancer(使用ImageCraft).它只需要GD库,它保留了gif动画


Ant*_*der 5

我已经尝试了许多使用Imagick PHP模块调整动画GIF大小的示例,但是没有一个对我有用。然后,在最后我一些调试时间后,发现实际的问题:动画是在保存图片到磁盘丢失,通过$animation->writeImage($file_dst);$animation->writeImages($file_dst, true);

我将其更改为 file_put_contents($file_dst, $animation->getImagesBlob()); ,大多数示例立即开始工作。

希望它可以帮助某人。