python在使用例如转换(pdf)到jpeg时设置最大文件大小棍棒

时间:2017-07-26 09:02:59

标签: python image-processing imagemagick wand

为了后续处理目的,在python中我将多页PDF(f)转换为JPEG(temp?.jpg):

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 个答案:

答案 0 :(得分:1)

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

幸运的是,您可以通过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)

在不久的将来。 {@ 1}}将被弃用,您只需致电wand.image.Option