更改 for-loop PIL Image 中的像素颜色

Change pixel color in for-loop PIL Image

我正在编写一个将“二进制”写入像素的应用程序(“1”代表白色,“0”代表黑色,“ ”代表浅灰色)。

这是一张类似图片的放大图:

我用 photoshopping 应用程序制作这张照片只是为了测试,但如何让您的应用程序在 for 循环中实际写入像素(到 .png 文件)?

这是我已经写下的代码。

from PIL import Image

def makePicture(string, file):
    img = Image.new("RGB", (round(len(string)), round(len(string))), 0xffffff)
    pixel = img.load()
    
    w = img.size[0]
    h = img.size[1]

    print("Converting string to binary...")
    print(' '.join(format(ord(x), 'b') for x in string))

如有不妥之处请指正!这是我第一次使用 PIL 图片库。

这是我最好的猜测如何做你想做的事。对于一个 3 个字符的字符串,它会生成一个 3x8 灰度 .png 格式的图像,但其中的像素都是黑色 (0) 或白色 (255),因为我一直不明白你所说的浅灰色在哪里像素来自…

from PIL import Image

def makePicture(string, filename):
    w, h = len(string), 8
    img = Image.new("L", (w, h), 0x7f)  # Gray-scale image.

    # Convert string to pixels.
    pixels = []
    for value in (ord(ch) for ch in string):
        col = []
        mask = 0b10000000  # Bit mask.
        while mask:
            col.append(bool(value & mask) * 255)
            mask >>= 1  # Shift right one bit position.
        pixels.append(col)

    # Transfer pixels to image.
    for x in range(w):
        for y in range(h):
            img.putpixel((x, y), pixels[x][y])

#    img.show()
    img.save(filename)


if __name__ == '__main__':

    makePicture('Hi!', 'binary_image.png')

这是它根据示例字符串创建的图像的放大图 'Hi!':