画像を保存せずにpyBarcodeの出力をPIL画像ファイルに変換しようとしています。pyBarcode出力をPILに変換する画像ファイル
>>> import barcode
>>> from barcode.writer import ImageWriter
>>> ean = barcode.get_barcode('ean', '123456789102', writer=ImageWriter())
>>> filename = ean.save('ean13')
>>> filename
u'ean13.png'
はあなたが上見ることができるように、私は、出力がPILイメージに加工したいので、画像は実際に私のファイルシステム上に保存されないようにする:まず第一に、pyBarcodeは、のような画像ファイルを生成します。だから私はいくつかの変更でした:
i = StringIO()
ean = barcode.get_barcode('ean', '123456789102', writer=ImageWriter())
ean.write(i)
は、今私はのStringIOファイルオブジェクトを持っていると私はそれを「読んで」とPIL画像ファイルに変換するPILにしたいです。私はImage.new
またはImage.frombuffer
を使用したかったが、これらの両方の機能にはサイズを入力する必要がありました...バーコードStringIOデータからサイズを決定できませんか? Image.open
は、ドキュメントに次のように記載しています。
文字列(ファイル名を表す)またはファイルオブジェクトを使用できます。後者の場合、ファイルオブジェクトはread、seek、tellメソッドを実装し、バイナリモードで開く必要があります。
StringIOインスタンスもファイルオブジェクトではありませんか?バイナリファイルとしてどのように開くのですか?
Image.open(i, 'rb')
>>> Image.open(i, 'rb')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/mark/.virtualenvs/barcode/local/lib/python2.7/site-packages/PIL/Image.py", line 1947, in open
raise ValueError("bad mode")
ValueError: bad mode
私は答えにかなり近いと確信しています。誰かの指導が必要です。事前にみんなありがとう!
あなたは 'Image.open'(私が意味する、ちょうどデフォルトモードで開きます)から2番目のパラメータを省略しようとしたことがありますか? –
'.seek(0)'を 'StringIO'の先頭に戻しましたか?次に、PauloScardineが提案したように、2番目のパラメータを省略します。 'io.BytesIO'も試してみてください。 –
ありがとうございました! seek(0)と2番目のパラメータを省略すると、トリックが実行されました。 – Mark