如何使用ImageMagick或RMagick将图像转换为1比特/像素的二进制位图?

8
我正在寻找将图像(png、jpeg等)转换为1个比特/像素位图图像的命令和选项(类似于在Photoshop中将其转换为位图时发生的情况)。请参见下面的示例。
我希望可以编程从rails应用程序中实现这一点(例如,通过RMagick或ImageMagick实现)。
以下是有效的:
convert yo.jpg -remap pattern:gray30 mono.gif

但我想更好地了解发生了什么,与phosotsohp在那种情况下会做什么相比;考虑到 这里 解释的许多可能性 (@roger_rowland 感谢再次提供链接)

最终我想要做的是拥有这个"效果",并且在将图像放大而不出现模糊效果。

2个回答

8

-单色

此选项使用一些智能抖动技术生成非常清晰的输出:

convert -monochrome in.png out.png

文档: http://www.imagemagick.org/Usage/quantize/#monochrome

与更简单的-threshold 50转换进行比较:

convert -threshold 50 in.png out.png

这段文字涉及IT技术,讲述了如何通过使用-monochrome命令来改善图像质量,而不需要自己去猜测更好的-threshold值。一个具体的例子可以从https://www.nasa.gov/mission_pages/galex/pia15416.html中找到。

wget -O orig.jpg http://www.nasa.gov/images/content/650137main_pia15416b-43_full.jpg
# Downsize to 400 height to have a reasonable file size for upload here.
convert orig.jpg -resize x400 in.jpg
convert -monochrome in.jpg out.jpg
convert -threshold 50 in.jpg threshold-50.jpg

in.jpg

enter image description here

out.jpg

enter image description here

threshold-50.jpg

enter image description here

相关问题:

在 Ubuntu 19.10 和 ImageMagick 6.9.10 上测试通过。


1
请注意,PNG的8位深度并不是PNG最小的深度,1位深度才是。它们可以存储不同类型的1位PNG(颜色类型0和3)。 - Tatarize

3
也许您只需要查看涵盖量化和抖动的ImageMagick文档,我认为这正是您所需的。是吗?
好的-为了确保在调整大小时不会模糊,您需要保留原始图像的副本(即在半色调或抖动之前)。然后,当您需要调整大小时,在原始图像的副本上进行调整大小(向上或向下,使用适当的插值器),然后在此调整大小的原始图像的副本上重复单色转换,以获得调整大小的单色图像。 编辑-根据您最新的评论,尝试使用以下内容:
convert yo.jpg -colorspace Gray -ordered-dither h4x4a -scale 2000x2000 mono.png 

好的,我真正寻找的是在不使图像模糊的情况下放大图像;而且(抱歉提到这个)在Photoshop中,将图像转换为位图后,调整大小时不会变得模糊,您可以保留这种“像素效果”。 - Ben
使用以下命令将 yo.jpg 转换为 mono.png:convert yo.jpg -remap pattern:gray30 -transparent '#ffffff' -scale 2000x2000 mono.png。我得到了想要的效果(我曾经卡在使用 resize 而不是 scale 上)。 - Ben
但是,pattern:gray30 似乎更像是一个预定义的设置;我想要更多地控制这种效果。 - Ben

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