我需要在不破坏动画的情况下调整动画GIF文件的大小.
我怎么能用PHP做到这一点?
如果你有imagemagick访问权限,你可以这样做:
system("convert big.gif -coalesce coalesce.gif"); system("convert -size 200x100 coalesce.gif -resize 200x10 small.gif");
如果您没有system()访问权限,则很可能使用imagemagick插件
注意:这可能会创建一个更大的文件大小,尽管较小的尺寸图像由于合并基本上不优化图像.
更新: 如果您没有ImageMagick访问权限,您应该能够使用以下步骤的组合来调整动画gif的大小(假设您具有GD访问权限):
检测图像是否是动画gif:我可以使用php和gd检测GIF动画吗?(回答)
将动画gif拆分为单独的框架:http://www.phpclasses.org/package/3234-PHP-Split-GIF-animations-into-multiple-images.html
调整各个框架的大小:http://www.akemapa.com/2008/07/10/php-gd-resize-transparent-image-png-gif/
将帧重新组合成动画gif:http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html
这肯定比ImageMagick路线密集得多,但它在技术上应该是可行的.
如果您使用它,请与世界分享!
您需要将gif分解为帧,缩略图和重新组合.
看看ImageMagick和本教程.
试试GDEnhancer(使用ImageCraft).它只需要GD库,它保留了gif动画
我已经尝试了许多使用Imagick PHP模块调整动画GIF大小的示例,但是没有一个对我有用。然后,在最后我一些调试时间后,发现实际的问题:动画是在保存图片到磁盘丢失,通过$animation->writeImage($file_dst);
或
$animation->writeImages($file_dst, true);
我将其更改为
file_put_contents($file_dst, $animation->getImagesBlob());
,大多数示例立即开始工作。
希望它可以帮助某人。