首页 > 解决方案 > 独立于文件扩展名使用 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”,一切正常。

标签: pythonimagemagickwand

解决方案


这对我来说很好用 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:前言的指示)。


推荐阅读