Joh*_*arr 3 png image imagemagick bmp
所以,我试图了解 PNG 到 BMP 转换实际上是如何发生的。我使用在线工具创建了以下 8x8 像素 PNG:
然后我在 OSX 终端中使用 ImageMagik 工具执行转换:
$ convert -monochrome pic.png pic.bmp
之后,我对图像进行了十六进制转储:
$ hexdump -C pic.bmp
00000000 42 4d 4a 01 00 00 00 00 00 00 8a 00 00 00 7c 00 |BMJ...........|.|
00000010 00 00 08 00 00 00 08 00 00 00 01 00 18 00 00 00 |................|
00000020 00 00 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 ff 00 |................|
00000040 00 00 00 00 00 ff 42 47 52 73 8f c2 f5 28 51 b8 |......BGRs...(Q.|
00000050 1e 15 1e 85 eb 01 33 33 33 13 66 66 66 26 66 66 |......333.fff&ff|
00000060 66 06 99 99 99 09 3d 0a d7 03 28 5c 8f 32 00 00 |f.....=...(\.2..|
00000070 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 |................|
00000080 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff |................|
00000090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00000130 ff ff 00 00 00 ff ff ff ff ff ff ff ff ff ff ff |................|
00000140 ff ff ff ff ff ff ff ff ff ff |..........|
0000014a
所以,显然我们有一个从 0x00 - 0x8C 的 BMP 标头。然后我们有 FF 代表白色像素,00 代表黑色。这一切都有意义,但输出的结构却没有。到目前为止,似乎是3比1的比例。每个像素 3 字节。我猜这意味着黑色、白色、无色?
我需要完全理解为什么每个像素有 3 个字节而不是 2 个。理想情况下,我希望每个像素有一个二进制 1 或 0。有没有办法做到这一点?如果没有,有人可以解释一下字节的布局吗?具体来说:为什么 3 个 00 位于 0x132 - 0x134,而不是最开始?
谢谢
事实上,如果使用 BMP3 或 BMP2 格式,Imagemagick 确实支持 1 位 BMP,但不支持 BMP4,BMP4 只是 BMP。因此,如果您想要每个通道 1 位深度,那么请执行以下操作
输入:
convert image.png -depth 1 BMP3:result.bmp
Run Code Online (Sandbox Code Playgroud)
如果您想要整个图像(即二进制)的 1 位深度,则执行
convert image.png -depth 1 -type bilevel BMP3:result2.bmp
Run Code Online (Sandbox Code Playgroud)
或者
convert image.png -depth 1 -threshold 50% BMP3:result3.bmp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9751 次 |
| 最近记录: |