3

私は Python 3 の PIL ライブラリを使用して .gif ファイルを変更していますが、これまでのほとんどの場合、最終結果は想定どおりに見えましたが、いくつかの rgb 値を確認すると、数個しか返されていないことに気付きました。 .

0、51、153、102 は、私が最も頻繁に取得する 4 つの値です。他にも1~2個あるかもしれませんが、それくらいです。200x200 の gif 画像では、4 ~ 6 個の RGB 値しか得られません。

これは、私が現在使用している一般的な形式のコピーです。

from PIL import Image

def main():
    image=Image.open("filename.gif")
    image=image.convert('RGB')
    width, height = image.size
    for x in range(width):
        for y in range(height):

            r, g, b = image.getpixel ((x,y))
            print (r,g,b)

上位ビットを下位ビットに転送するために 4 だけ右シフトしようとしましたが、戻り値はほとんど常に 0 です。

コーディングで何か間違っていますか?ビット値を左右にシフトしようとすると、いくつかの問題が発生すると思います。

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

4

1 に答える 1

1

あなたが投稿したコードに問題はありません。

返される値の完全なリストは、間違いなく 0、51、102、153、204、および 255、または 16 進数: 0x00、0x33、0x66、0x99、0xcc、0xff (0% から 100% までの強度を表します) 、20% のステップで)。これらが 6 つあるため、それらが表現できる色の総数は 6 * 6 * 6 = 216 であり、216 < 256 であるため、GIF 形式の 256 色パレット内に収まることを意味します。

これらはWeb セーフ カラーとも呼ばれ、歴史的な理由から GIF 画像でよく使用されます。

ただし、右シフトの問題は無関係のように見えます。

>>> for x in 0, 51, 102, 153, 204, 255:
...     print x >> 4
... 
0
3
6
9
12
15
>>> 
于 2012-10-30T14:07:40.780 に答える