是否可以在图像上添加自定义频道?

时间:2015-08-18 16:41:07

标签: image channel

我正在尝试制作具有自定义渠道的自定义图片格式。本质上,我试图为每个像素存储一些元数据,但在同一图像上。我知道每个像素有4个通道,a,r,g,b。我想知道它是否可以做一些像a,r,g,b,z这样的东西,其中z是我可以设置的新数字。

有人知道吗?

由于

1 个答案:

答案 0 :(得分:1)

大多数程序,即Photoshop,GIMP,ImageMagick和OSX Finder都会忽略JPEG,PNG或GIF图像末尾的无关数据,因此您可能会在这些文件的末尾添加一个或多个额外的数据通道 - 使用PROVISO ,当他们迅速丢失所有附加数据时,您不会让他们写文件。

因此,请记住,您可以使用ImageMagick生成额外的通道/数据带,并将其附加到普通RGBA图像的末尾。因此,让我们创建一个红黄色渐变作为传统的PNG图像。你也可以使用JPEG或TIFF。

convert -size 256x256 gradient:red-yellow.png

enter image description here

,这是我机器上的935字节。

现在创建一个相同大小和单个通道的棋盘图案,即灰度模拟“额外通道”,并将其附加到PNG文件的末尾:

convert -size 256x256 pattern:checkerboard -depth 8 gray:- >> image.png

现在PNG文件是66,471字节,但仍可查看。因此,为了提取额外的通道,我们需要确定灰度图像是256x256字节,即65,536字节,并从66,471减去得到935字节,这是我们的二进制棋盘的偏移量。我们现在可以像这样阅读它并将其变成PNG或JPEG格式:

convert -size 256x256+935 -depth 8 gray:image.png checkerboard.png

然后你把棋盘拿出来了:

enter image description here

如果你想为每个像素存储一个4字节的浮点数,而不是我使用的8位灰度,你需要使用

-define quantum:format=floating-point

-depth 32

并记住在计算偏移时图像大小为HxWx4字节。

ImageMagick安装在大多数Linux发行版上,可用于OSX(最好使用homebrew)和Windows here

是的,这是一个丑陋的黑客,但没有比原来的问题更丑: - )