python - 独立于文件扩展名使用 Wand 生成 gif
问题描述
有没有办法强制 Wand 以.gif
动画格式保存图像,无论传递filename
什么Image.save()
?
with Image() as gif:
gif.sequence = frames # 10 images
gif.format = 'gif'
gif.save(filename='image.jpg')
这段代码创建了 10 个带数字的 jpg-s,但我希望它会创建一个文件(image.jpg
实际上是一个 gif)。文档说可以在该字段中设置所需的格式format
。
为什么扩展名filename
的优先级高于Image.format
?
有问题的 Wand 版本是 0.5.8。
UPD:澄清一下,我的问题中的差异是故意的。我对.format
设置为“gif”但文件名以.save()
不正确的扩展名“.jpg”传递的情况感兴趣,我想知道在这种情况下是否有办法生成单个 gif。如果文件扩展名设置为“.gif”,一切正常。
解决方案
这对我来说很好用 Wand 0.5.7 和 Imagemagick 6.9.10.91 Q16 Mac OSX
from wand.image import Image
with Image(filename='desktop5_anim.gif') as img:
img.format = 'gif'
img.save(filename='desktop5_anim2.gif')
这也适用于创建动画。
from wand.image import Image
with Image(filename='lena.jpg') as imgA:
with Image(filename='zelda1.jpg') as imgB:
imgA.sequence.append(imgB)
for frame in imgA.sequence:
frame.delay = 50
imgA.loop = 0
imgA.format = 'gif'
imgA.save(filename='lena_zelda_anim.gif')
如果您打算在文件名中保留“.jpg”后缀,则输出文件实际上将是一个 GIF 动画,无论后缀如何,如果您在文件名前加上 GIF: as gif.save(filename='GIF:image.jpg')
。但是,我真的不建议这样做,因为某些工具仅使用后缀来决定文件的格式。因此,在尝试将 GIF 动画读取为 JPG 时,他们会报错。
(感谢 Eric McConville 关于如何添加延迟和 GIF:前言的指示)。
推荐阅读
- python - 在容器中找不到 Python 模块
- postgresql - 如何使用纯 docker-compose 将 PostGIS 添加到我的 PostgreSQL 设置中
- cmake - CMake 在子目录中找不到 Fortran 源文件
- unit-testing - 由于 LocaDateTime 字段,单元测试未通过
- httpclient - PoolingHttpClientConnectionManager(apache.httpcomponents) 对 maxTotal 和 defaultMaxPerRoute 使用惰性或急切初始化?
- r - 从互相关到 R 中的列格式
- python - Selenium:能够通过完整的 XPath 定位元素,无法通过带有属性选择器的 XPath 定位
- python-3.x - 在 django 中手动添加日期和时间
- mysql - 如何根据 laravel 中的一列获取最新记录?
- html - 即使应该已经隐藏了 HTML 下拉菜单也会弹出