【问题标题】:Cannot open image. Not a valid bitmap file or its format is not currently supported无法打开图像。不是有效的位图文件或其格式当前不受支持
【发布时间】:2017-10-04 23:44:27
【问题描述】:

我编写了这个 Python 程序来创建矩阵(二维数组)并将其保存到 .png 文件中。该程序编译并运行,没有任何错误。即使创建了 IMAGE.png 文件,但 png 文件也不会打开。当我尝试在 MSpaint 中打开它时,它说:

无法打开图片。不是有效的位图文件或其格式目前不受支持。

源代码:

import numpy;
import png;

imagearray = numpy.zeros(shape=(512,512));

/* Code to insert one '1' in certain locations 
   of the numpy 2D Array. Rest of the location by default stores zero '0'.*/


f = open("IMAGE.png", 'wb');
f.write(imagearray);
f.close();

我不明白我哪里出错了,因为没有错误消息。请帮忙。

PS- 我只是想将矩阵保存为图像文件,所以如果您在 Python2.7 中有更好更简单的方法,请建议。

谢谢。

【问题讨论】:

  • PNG 文件不仅仅是数组中数据的转储。您需要使用库从 numpy 数组创建 PNG 文件。类似Pillow,或pypng,或我创建的名为numpngw 的小模块。

标签: python python-2.7 numpy bitmap pypng


【解决方案1】:

并非每个数组都与图像格式兼容。假设你指的是一个字节数组,你就是这样做的:

import os
import io
import Image
from array import array

def readimage(path):
    count = os.stat(path).st_size
    with open(path, "rb") as f:
        return bytearray(f.read())

bytes = readimage(path+extension)
image = Image.open(io.BytesIO(bytes))
image.save(savepath)

代码 sn-p 取自here

希望对你有所帮助, 雅丽。

【讨论】:

    【解决方案2】:

    这是一个使用numpngw 创建位深为 1 的图像的示例(即图像中的值只有 0 和 1)。该示例直接取自 numpngw 包的 README 文件:

    import numpy as np
    from numpngw import write_png
    
    # Example 2
    #
    # Create a 1-bit grayscale image.
    
    mask = np.zeros((48, 48), dtype=np.uint8)
    mask[:2, :] = 1
    mask[:, -2:] = 1
    mask[4:6, :-4] = 1
    mask[4:, -6:-4] = 1
    mask[-16:, :16] = 1
    mask[-32:-16, 16:32] = 1
    
    write_png('example2.png', mask, bitdepth=1)
    

    图片如下:

    【讨论】:

    • 像魔术一样工作!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2014-05-24
    • 2019-06-09
    • 2018-01-26
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多