1

我不确定这是否可行,但我正在尝试以自动方式从 pdf 生成一些缩略图,然后将它们存储在 elasticsearch 中。基本上,我想将 pdf 转换为一系列 jpg(或 png 或类似的东西),然后将它们索引为二进制文件。目前我正在像这样制作这些jpg:

import subprocess
params = ['convert', 'pdf_file', 'thumb.jpg']
subprocess.check_call(params)

效果很好,但它只是将jpgs写入文件系统。我希望将这些文件作为字符串而不将它们写入本地文件系统。我试过使用子进程的标准输出方法,但我对使用子进程还很陌生,所以我无法弄清楚这一点。

我正在使用 imagemagick 进行此转换,但只要我能实现此目标,我愿意切换到任何其他工具。有任何想法吗?

4

3 回答 3

2

您可以使用 imagemagick 的python API,例如:

import PythonMagick

img = PythonMagick.Image("file.pdf")
img.depth = 8
img.magick = "RGB"
data = img.data

或使用魔杖

from wand.image import Image

with Image(filename='file.pdf') as img:
    data = img.make_blob('png')
于 2013-06-25T21:35:54.827 回答
2

您可以让它将数据发送到标准输出......

import subprocess
params = ['convert', 'pdf_file', 'jpg:-']
image_data = subprocess.check_output(params)
于 2013-06-25T21:39:36.953 回答
1

我希望将这些文件作为字符串而不将它们写入本地文件系统。

这样做的方法是告诉命令将其数据写入标准输出而不是文件,然后从proc.stdout.

并非每个命令都有办法告诉它这样做,但在许多情况下,只需-作为输出文件名传递即可,ImageMagick 的convert. 当然你还需要给它一个格式,因为它不能再从thumb.jpg. 最简单的方法convert是将类型添加到-伪文件名的前缀。(不要尝试使用除 . 之外的任何东西ImageMagick。)

所以:

import subprocess
params = ['convert', 'pdf_file', 'jpg:-']
converted = subprocess.check_output(params)

然而,这会给你一个巨大的字符串。如果您试图获得一堆单独的图像,则需要将一个巨大的字符串拆分为单独的图像,这可能需要一些 JPEG/JFIF 格式的知识。

于 2013-06-25T21:39:02.387 回答