2017-07-26 26 views
2

对于后续的处理目的,在Python我转换多页PDF(f)为JPEG文件(temp?.jpg):python设置最大文件大小时转换(pdf)为JPEG使用例如魔杖

import os 
from wand.image import Image as wimage 

with wimage(filename=f,resolution=300) as img: 
    for i in range(len(img.sequence)): 
     ftemp=os.path.abspath('temp%i.jpg'%i) 
     img_to_save=wimage(img.sequence[i]) 
     img_to_save.compression_quality = 100 
     img_to_save.format='jpeg' 
     img_to_save.save(filename=ftemp) 

我使用的,因为它的测序PDF页面的能力棒,但我开放给PIL等

我需要resolutioncompression_quality尽可能高,但我希望每个JPEG不大于(比方说)300 kb的大小。

如何设置JPEG文件大小的限制?

在命令行中我只想做(见https://stackoverflow.com/a/11920384/1021819):

convert original.jpeg -define jpeg:extent=300kb -scale 50% output.jpg 

谢谢!

回答

1

库有wand.image.OptionDict用于管理-define属性,但不幸的是所有选项都被锁定为wand.image.Option frozenset。 恕我直言,这使整个功能无法使用。

幸运的是,您可以通过wand.api创建一个快速子类来处理这个问题。

import os 
from wand.image import Image 
from wand.api import library 
from wand.compat import binary 

class wimage(Image): 
    def myDefine(self, key, value): 
     """ Skip over wand.image.Image.option """ 
     return library.MagickSetOption(self.wand, binary(key), binary(value)) 


with wimage(filename=f, resolution=300) as img: 
    for i in range(len(img.sequence)): 
     ftemp=os.path.abspath('temp%i.jpg'%i) 
     with wimage(img.sequence[i]) as img_to_save: 
      img_to_save.myDefine('jpeg:extent', '300kb') 
      img_to_save.compression_quality = 100 
      img_to_save.format='jpeg' 
      img_to_save.save(filename=ftemp) 

在不久的将来。wand.image.Option将被弃用,您可以简单地致电img_to_save.options['jpeg:extent'] = '300kb'

+0

现货 - 非常感谢你! – jtlz2

相关问题