【问题标题】:Image data length图像数据长度
【发布时间】:2021-05-20 17:02:24
【问题描述】:

我正在尝试从此 png 图像中读取数据,然后将图像长度放在数据的开头,并将其填充由我的 header 变量定义的给定数量的空格。但是,一旦我这样做,图像长度就会由于我不知道的原因而急剧增加。请问有人可以告诉我发生了什么吗?我一定是遗漏了一些东西,因为我对这个领域还很陌生。

HEADER = 10
PATH = os.path.abspath("penguin.png")
print(PATH)
with open(PATH,"rb") as f:
    imgbin = f.read()
    print(len(imgbin))
    imgbin = f"{len(imgbin):<{HEADER}}"+str(imgbin)
    print(len(imgbin))

当我第一次打印数据的长度时,我得到了 163287 的长度,而在第二次打印时,我得到了 463797 的长度

【问题讨论】:

    标签: python image


    【解决方案1】:

    这是因为当您将图像加载到通过str 传递图像时,您正在将数据从二进制字符串更改为字符串:

    len(imgbin), len(str(imgbin))
    >>> (189255, 545639)
    

    (注意我使用不同的图像,所以数字不同)。您可以通过在开头添加二进制字符串来解决此问题,如下所示:

    with open(PATH,"rb") as f:
        imgbin = f.read()
        imgbin = f"{len(imgbin):<{HEADER}}".encode('utf-8')+imgbin
        print(len(imgbin))
    >>> 189245
    >>> 189255
    

    您可以了解有关二进制字符串here 的更多信息。

    作为参考,值得注意的是 png 图像的类型为 uint-8(即 0-255)。可以将它们作为二进制字符串进行操作,因为它们可以是utf-8(即相同的大小)。但是,可能值得使用 numpy 之类的东西,其中您有 uint-8 作为数据类型以避免这种情况。

    【讨论】:

    • 谢谢!肯定会阅读更多关于这个主题的内容。
    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多