1

我正在尝试编写一个程序来创建一个 png 文件并将外部像素涂成黑色。我只需要黑白,所以 bitdepth=1 适用于我的情况。

import png
import numpy as np 

MazeHeight = 5
MazeWidth = 7

if __name__ == "__main__":
    file = open('png.png', 'wb')
    writer = png.Writer(MazeWidth, MazeHeight, greyscale=True, bitdepth=1)
    #generating white array
    Maze = np.ones((MazeHeight,MazeWidth),dtype=int)
    #mark borders as black
    for i in range(MazeHeight):
        for j in range(MazeWidth):
            #top/bottom bordes
            if i == 0 or i == MazeHeight-1:
                Maze[i][j] = 0
            #left/right
            elif j == 0 or j == MazeWidth-1:
                Maze[i][j] = 0
    writer.write(file, Maze)
    file.close()

如果我将迷宫打印到控制台,它看起来很好:

[[0 0 0 0 0 0 0]
 [0 1 1 1 1 1 0]
 [0 1 1 1 1 1 0]
 [0 1 1 1 1 1 0]
 [0 0 0 0 0 0 0]]

png.png 文件看起来不像 numpy 数组

[[1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1]
 [0 1 1 1 0 1 1]
 [1 1 1 1 1 1 1]]

(1是黑色,0是白色,因为我不能上传图片)

我不知道为什么我的控制台输出与 png 文件不同。我正在努力阅读 png 文件。我知道有一个带有 png.Reader 的 read() 方法,但会引发错误:“png.FormatError: FormatError: PNG file has invalid signature。”

4

1 回答 1

1

我自己发现了我的问题:我必须对图像使用无符号字节而不是 int。 Maze = np.ones((MazeHeight,MazeWidth),dtype=int)Maze = np.ones((MazeHeight,MazeWidth),dtype=uint8)

于 2020-08-26T09:16:12.083 回答