1

これが可能かどうかはわかりませんが、pdf から自動化された方法で多数のサムネイルを生成し、elasticsearch に保存しようとしています。基本的に、pdf を一連の jpg (または png、または同様のもの) に変換し、それらをバイナリとしてインデックス付けしたいと考えています。現在、私はこれらのjpgを次のように作成しています:

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

これはうまく機能しますが、jpg をファイルシステムに書き出すだけです。これらのファイルを、ローカル ファイル システムにまったく書き出さずに文字列として保持したいと考えています。サブプロセスの stdout メソッドを使用してみましたが、サブプロセスを使用するのはかなり初めてなので、これを理解できませんでした。

この変換には imagemagick を使用していますが、この目標を達成できる限り、他のツールに切り替えることもできます。何か案は?

4

3 に答える 3

2

代わりにデータを標準出力に送信することができます...

import subprocess
params = ['convert', 'pdf_file', 'jpg:-']
image_data = subprocess.check_output(params)
于 2013-06-25T21:39:36.953 に答える
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 に答える
1

これらのファイルを、ローカル ファイル システムにまったく書き出さずに文字列として保持したいと考えています。

これを行う方法は、ファイルの代わりに標準出力にデータを書き込むようにコマンドに指示し、proc.stdout.

すべてのコマンドにこれを行うように指示する方法があるわけではありませんが、多くの場合、-出力ファイル名として渡すだけでそれが行われます.ImageMagickのconvert. もちろん、拡張子からは推測できないため、フォーマットも指定する必要がありますthumb.jpg。これを行う最も簡単な方法は、疑似ファイル名convertの前にタイプを付けることです。-( 以外のものでそれを試さないでくださいImageMagick。)

そう:

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

ただし、これは 1 つの巨大な文字列を取得します。多数の個別の画像を取得しようとしている場合は、1 つの巨大な文字列を個別の画像に分割する必要があります。これには、おそらく JPEG/JFIF 形式の知識が必要です。

于 2013-06-25T21:39:02.387 に答える