ImageMagick:以BGR顺序写入像素

5

我想将(许多)JPEG图像转换为Sun Raster格式(例如在这里),因为我的程序只能使用这种格式。

问题是,我的程序仅允许使用类型为Old或Standard的图像,即以BGR顺序编写像素的图像。(我应该改变这一点,但没有时间)。 默认情况下,ImageMagick会生成RGB格式的文件。

我找到了一个技巧来交换颜色平面,但由于文件以RGB格式编写,所以我得到了花哨的颜色。

这可能是传递给ImageMagick的简单选项,但我没有找到它。 你有什么想法吗?

4个回答

10

另一种交换颜色的方法是使用-color-matrix选项。例如,将RGB转换为BGR:

convert input.png -color-matrix '0 0 1
                                 0 1 0
                                 1 0 0' output.png

参考:http://www.imagemagick.org/Usage/color_mods/

这是一个关于IT技术的网站,提供了有关图像操作的一些颜色调整信息。请点击上方链接进入。

6
在Imagemagick 6中,您可以使用“-swap”命令轻松完成此操作。让我们在徽标图像中交换红色和蓝色通道。

enter image description here

convert logo.png -separate +channel \
-swap 0,2 -combine -colorspace sRGB logo_bgr.png

在这里输入图片描述

对于非常老的Imagemagick版本,请使用RGB而不是sRGB。

在Imagemagick 7中,请使用magick而不是convert。


3

我有一个想法可以在RGB图像中交换红色和蓝色颜色:

convert ( image_RGB.bmp -channel B -separate ) \
    ( image_RGB.bmp -channel G -separate ) \
    ( image_RGB.bmp -channel R -separate ) -channel RGB -combine image_BGR.bmp

你只需要从原始图像中切割通道并按相反的顺序编写它们。

谢谢。我尝试了你的例子,但它不起作用。你确定语法正确吗? - Mathieu Dubois
无论如何,这听起来就像是此页面,也就是你交换了通道。但在这种情况下颜色会不同。在我的情况下,这只是图像格式的问题。 - Mathieu Dubois
语法:尝试删除“\”符号和换行符,我添加了它以提高可读性。是的,通道只是交换了,当您在标准查看器中查看转换后的图像时,颜色似乎很奇特。但我认为您的程序可以正确读取和查看它,那么您为什么需要其他东西呢? - moropus
抱歉,我离开了几天。我的程序测试头部的类型字段。如果该值与Old或Standard不同,则停止运行。我可以修复它,但那将是一个糟糕的hack。 - Mathieu Dubois
顺便提一下,在GNOME桌面环境下,Nautilus缩略图生成器似乎无法显示使用ImageMagick转换的RGB图像。 - Mathieu Dubois
我放弃了。我唯一看到的方法就是编辑ImageMagick并添加自己的选项(因为它是开源的)。 - moropus

1

我本以为在Imagemagick中

convert image.jpg image.sun

or

convert image.jpg SUN:image.sun

如果BGR格式是太阳光栅格式的标准,就会转换为BGR格式。请参见imagemagick.org/script/formats.php。
你试过了吗?
如果那样不起作用,那么使用我的-swap命令,但将其写入.sun文件格式,而不是我上面使用的png格式。
convert logo.png -separate +channel -swap 0,2 -combine -colorspace sRGB logo_bgr.sun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接