我正在尝试制作具有自定义渠道的自定义图片格式。本质上,我试图为每个像素存储一些元数据,但在同一图像上。我知道每个像素有4个通道,a,r,g,b。我想知道它是否可以做一些像a,r,g,b,z这样的东西,其中z是我可以设置的新数字。
有人知道吗?
由于
答案 0 :(得分:1)
大多数程序,即Photoshop,GIMP,ImageMagick和OSX Finder都会忽略JPEG,PNG或GIF图像末尾的无关数据,因此您可能会在这些文件的末尾添加一个或多个额外的数据通道 - 使用PROVISO ,当他们迅速丢失所有附加数据时,您不会让他们写文件。
因此,请记住,您可以使用ImageMagick生成额外的通道/数据带,并将其附加到普通RGBA图像的末尾。因此,让我们创建一个红黄色渐变作为传统的PNG图像。你也可以使用JPEG或TIFF。
convert -size 256x256 gradient:red-yellow.png
,这是我机器上的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
然后你把棋盘拿出来了:
如果你想为每个像素存储一个4字节的浮点数,而不是我使用的8位灰度,你需要使用
-define quantum:format=floating-point
和
-depth 32
并记住在计算偏移时图像大小为HxWx4字节。
ImageMagick安装在大多数Linux发行版上,可用于OSX(最好使用homebrew
)和Windows here。
是的,这是一个丑陋的黑客,但没有比原来的问题更丑: - )