4

基本的に私がやりたいのは、ファイルを取得し、そのバイナリデータ(もちろん10進数)をリストに入れ、そのリストに基づいてPILを使用してグレースケールビットマップイメージを生成することです。

たとえば、ファイルが5000バイト(画像サイズは100 x 50)で、各バイトが0〜255の整数である場合、最初のバイトを最初のピクセルにペイントし、すべてのバイトがなくなるまで行を下に移動します。

私がこれまでに得た唯一のことは、次のファイルを読み取ることです。

f = open(file, 'rb')
text = f.read()
for s in text:
    print(s)

これにより、バイトが10進数で出力されます。

私はこれを達成する方法についていくつかの方向性を探しています。私はたくさんの検索をしましたが、私がやりたいことをやろうとした人はそれほど多くないようです。

どんな助けでも大歓迎です!

4

4 に答える 4

3

PIL イメージのドキュメントから:

Image.fromstring(mode, size, data)

あなたの例:

im = Image.fromstring('L', (100, 50), text)

関数もありfrombufferますが、違いは明らかではありません。

于 2012-05-26T04:00:00.180 に答える
3

これでいいと思います。scipyオプションですか?

In [34]: f = open('image.bin', 'r')

In [35]: Y = scipy.zeros((100, 50))

In [38]: for i in range(100):
             for j in range(50):
                 Y[i,j] = ord(f.read(1))

In [39]: scipy.misc.imsave('image.bmp', Y)
于 2012-05-26T03:47:24.630 に答える
2

これにPILを使用することは信じられないほど効率的ではないと思いますがImageDraw、空白のキャンバスにペイントする場合は、モジュールを調べることができます。

私のアプローチは少し異なります。ファイル形式はNetpbm形式に非常に似ているため、変換してみます。簡単にするために、PILがネイティブに読み取ることができるように、読み取り中にフォーマットのヘッダーを追加/操作してみてください。

于 2012-05-26T03:11:23.167 に答える