【问题标题】:Converting 4 hex bytes to RGBA color将 4 个十六进制字节转换为 RGBA 颜色
【发布时间】:2021-04-28 18:43:39
【问题描述】:

我有一个 512x512 的图像文件,每 4 个字节使用一个 RGBA 像素。这是一个例子:

1F 8B 08 00

第一个 (R)、第二个 (G) 和第三个 (B) 字节代表 RGB 值,每个值的范围从 0 到 255。最后一个字节 (A) 代表 alpha 通道,范围也是从 0 到255. 如果我想要一个不透明的像素,我必须用 FF 替换最后一个字节(转换为十进制时为 255)。将 4 个字节转换为 RGBA 后,我可以使用 PIL 创建图像,前 4 个字节是位于左上角的像素。

现在这里是 4 个字节,手动转换为 1x1 RGBA 像素: image

这是像素的 RGBA 值,基于 4 个字节:

199(R) 239(G) 125(B) 213(A)

基本上,每个字节都应该转换成一个从 0 到 255 的数字,每 4 个字节是一个 RGBA 值。我可以将这些值放入一个元组中,每 4 个值作为一个 RGBA 像素进行迭代,第一个像素位于图像的左上角。

【问题讨论】:

  • 这里有问题吗?
  • 基本上,如何将文件中的每 4 个十六进制字节转换为 4 个表示 RGBA 值的整数,每个整数的范围从 0 到 255,然后放入一个元组中,我可以将每 4 个值作为RGBA 值。我也不知道如何告诉 PIL 根据 RGBA 值绘制一个像素,从图像的左上角开始,到右下角结束。
  • 请分享文件 - 您可能需要使用 Dropbox 或 Google Drive。
  • 好的,这里是 google drive 链接:drive.google.com/file/d/1yvn1u2NXwufuKJIn0Wq7AQbL9eGh1Bza/… 该文件是 gzip 压缩的,所以你必须先解压它。里面的文件包含 RGBA 十六进制数据。

标签: python image python-imaging-library


【解决方案1】:

最简单的阅读方法是使用 Numpy:

import numpy as np
from PIL import Image

# Load (unzipped) binary file into Numpy array and reshape
na = np.fromfile('a.rgba',dtype=np.uint8).reshape((512,512,4))

# Make into PIL Image and save
Image.fromarray(na).save('result.png')


顺便说一句,你并不需要任何 Python,你可以在终端中使用 ImageMagick 来完成:

magick -depth 8 -size 512x512 RGBA:yourFile.rgba -auto-level result.png

我添加-auto-level只是为了好玩,以拉伸对比度。


如果你不使用 Numpy,这里是第三种方法:

from PIL import Image

# Slurp entire binary file
with open('image.rgba', 'rb') as file:
    data = file.read()

# Make into PIL Image with raw decoder
im = Image.frombuffer('RGBA', (512,512), data, 'raw', 'RGBA', 0, 1)

【讨论】:

  • 谢谢大家!我不知道代码如此简单。我想过使用元组,但我认为它太复杂了。结果如下:i.imgur.com/oYFjpf2.png
猜你喜欢
  • 2015-05-19
  • 2013-12-03
  • 2012-05-14
  • 2019-08-12
  • 2014-03-05
  • 2018-04-08
  • 2018-07-10
  • 1970-01-01
相关资源
最近更新 更多