Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 是否可以在图像上添加自定义频道?_Image_Channel - Fatal编程技术网

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

Image 是否可以在图像上添加自定义频道?,image,channel,Image,Channel,我正在尝试做一个自定义的图像格式,它有自定义的频道。本质上,我试图为每个像素存储一些元数据,但存储在同一个图像上。我知道每个像素有4个通道a、a、r、g、b。我想知道是否可以做一些像a,r,g,b,z这样的事情,其中z是一些我可以设置和获取的新数字 有人知道吗 谢谢大多数程序,如Photoshop、GIMP、ImageMagick和OSX Finder会忽略JPEG、PNG或GIF图像末尾的无关数据,因此,您可能会在这些文件的末尾添加一个或多个额外的数据通道,但有一个附加条件,即当它们将立即丢失

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

有人知道吗


谢谢

大多数程序,如Photoshop、GIMP、ImageMagick和OSX Finder会忽略JPEG、PNG或GIF图像末尾的无关数据,因此,您可能会在这些文件的末尾添加一个或多个额外的数据通道,但有一个附加条件,即当它们将立即丢失所有附加的数据时,您不允许它们写入文件

因此,请记住,您可以使用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文件是66471字节,但仍然可以查看。因此,为了提取额外的通道,我们需要确定灰度图像是256x256字节,即65536字节,然后从66471中减去它,得到935字节,这是二进制棋盘的偏移量。我们现在可以像这样阅读它,并将其转换为PNG或JPEG格式:

convert -size 256x256+935 -depth 8 gray:image.png checkerboard.png
然后你就可以拿下你的棋盘了:

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

-define quantum:format=floating-point

请记住,在计算偏移量时,图像大小为HxWx4字节

ImageMagick安装在大多数Linux发行版上,并可用于OSX,最好使用来自的自制和Windows


是的,这是一个丑陋的黑客,但并不比最初的问题更丑陋:-

这有什么好处?GeoTIFF支持成千上万的乐队/频道-试试谷歌gdal和GeoTIFF。当然你可以。为什么你不能呢?虽然我可能不理解这个问题,因为很明显你可以。那么我怎么做呢?你需要为每个通道存储一个4字节的浮点,还是一个8位整数或一个16位整数?整个图像是否需要比其宽度、高度和通道数更多的元数据?您是否了解,除您自己的软件外,其他软件通常不会使用该图像?
-depth 32