2016-12-16 69 views
0

我有以下代码如何使用魔杖降低gif质量?

from wand.image import Image 

def saveSizes(f, filename): 
    scaled_width = 400 
    scaled_hight = 400 
    with Image() as finalImage: 
     with Image(filename=f) as img: 
      for frame in img.sequence: 
       #frame.transform(resize="%dx%d" % (scaled_width, scaled_hight)) 
       frame.compression_quality = 75 
       finalImage.sequence.append(frame) 
     filename += '.gif' 
     finalImage.save(filename = filename) 
saveSizes('source_file.gif', 'dest_file') 

但“source_file.gif”大小相同“dest_file.gif”的。为什么“compression_quality”属性不起作用?

有没有更好的方法来减少gif使用魔杖或其他一些python库的大小。

此外,我在控制台中获取gif中每个帧的以下日志。

Exception ignored in: <bound method Resource.__del__ of <wand.sequence.SingleImage: 901eb12 (200x150)>> 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/site-packages/wand/resource.py", line 232, in __del__ 
    self.destroy() 
    File "/usr/local/lib/python3.5/site-packages/wand/sequence.py", line 331, in destroy 
    self.container.sequence[self.index] = self 
    File "/usr/local/lib/python3.5/site-packages/wand/sequence.py", line 304, in index 
    assert image 
AssertionError: 
+0

恕我直言,以减少的GIF文件的大小最好的办法是减少颜色数量 - 尝试将颜色数量设置为31或63或127,看看是否有帮助。 –

回答

0

compression_quality与源文件(整个文件)正常工作。

我的工作与PDF的例子:

def ConvertFewPagePdfToPngs(pdf): 
    with wand.image.Image(filename = pdf, resolution = 200) as source: 

     source.compression_quality = 99 
     imagess = source.sequence 
     for i in range(len(imagess)): 
      imagess[i].format = 'png' 
      destFileName = r'path' # depends on i 
      wand.image.Image(imagess[i]).save(filename=destFileName) 

,当我试图申请compression_quality到一个页面,我得到同样的错误你展示