python 设置将 (pdf) 转换为 jpeg 时的最大文件大小,例如棍棒

2023-11-30

为了后续处理的目的,在 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)

我使用 wand 是因为它能够对 PDF 页面进行排序,但我对 PIL 等持开放态度。

我需要resolution and compression_quality尽可能高,但我希望每个 JPEG 的大小不超过(例如)300 kb。

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

在命令行上我只会做(参见https://stackoverflow.com/a/11920384/1021819):

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

Thanks!


The wand图书馆有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)

在不远的将来。 The wand.image.Option将被弃用,你可以简单地调用img_to_save.options['jpeg:extent'] = '300kb'.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 设置将 (pdf) 转换为 jpeg 时的最大文件大小,例如棍棒 的相关文章

随机推荐