使用 Image Magick 生成低分辨率黑白文本
Generating Low Resolution Black and White Text with Image Magick
我需要在 ImageMagick 中生成文本的低分辨率黑白图像。这些图像将绘制在一个小型 LED 矩阵中。文本需要有 7 个像素的高度。
目前,我正在使用:
convert -negate -threshold 15% -font Courier -size 80x11 caption:'hello' out.bmp
输出图像:
即使高度超过我的需要,由于低分辨率和抗锯齿校正,字母也不漂亮和对称。有没有人这样做并且可以帮助我?
版本:ImageMagick 6.8.9-9 Q16x86_64
您没有告诉我们什么版本的 ImageMagick 或平台,也没有显示您的结果让我们看看可能有什么问题。您的 ImageMagick 语法也不正确,尽管 ImageMagick 6 相当宽容。
这是我使用 ImageMagick 6.9.10.8 Q16 Mac OSX Sierra 得到的结果。第一个输出为 8 像素高,第二个输出缩放 1000% (10x)。
这个论坛好像没有把bmp转换成可用的显示格式,所以我用GIF代替了BMP。但无论是 BMP 还是 GIF,我的结果看起来都一样
convert -size x8 -font Courier label:'hello' -negate -threshold 20% +write out.gif -scale 1000% out2.gif
我试过改变阈值,但更大或更小的值会使情况变得更糟。大约 10-30% 的范围会产生相同的结果。
我也尝试过使用 -monochrome 代替 -threshold 并得到以下结果:
convert -size x8 -font Courier label:'hello' -negate -monochrome +write out3.gif -scale 1000% out4.gif
你可以试试点阵字体。参见 https://www.1001fonts.com/digital+dot-matrix-fonts.html?page=1&items=10。我一个都没试过。
我倾向于输出比要求大的字母,然后 trim 任何多余的备用 space 以充分利用可用的分辨率,然后根据您的特定需要调整大小:
convert -size 320x32 -font Courier label:'hello' -trim +repage -resize 80x8 +write out.gif
马克,我想他想要二进制结果。但是你有一个绝妙的主意。
让我们采用 Mark 的结果,阈值然后缩小到 8 像素高。这个 ImageMagick 命令似乎比我之前的 post 更有效。
马克的输出:
convert wcwuj.gif -threshold 60% +write thresh.gif -scale x8 result.gif
阈值结果:
缩放结果:
也许让 Mark 的图像更大并选择更好的阈值会产生更好的结果。
您可以尝试一些旧的 X11 字体。这些是手绘的,而不是从一组曲线中渲染出来的,所以它们在非常小的尺寸下看起来很好。
例如,如果我 运行 xfontsel
我得到这样的东西(为清楚起见放大):
看看/usr/share/fonts/X11/misc
。
我找到的解决方案是使用 TrueType 字体。刚刚从 Internet 上获得了一个免费字体,并按照其设计的大小使用了它。
P.S.: 也切换到 OpenCV。我的 Python 应用动态生成图像。每分钟调用 ImageMagick 几次(可能接近一百次)的成本太高了。
发布一个片段,希望对您有所帮助。
import cv2 as cv
from PIL import ImageFont, ImageDraw, Image
# Creates a black image with 80x10 size
img = Image.new('RGBA', (80, 10), (0,0,0,0))
draw = ImageDraw.Draw(img)
# Load TrueType font of height size 8
font = ImageFont.truetype("font.ttf", 8)
# Draw text using the loaded font
draw.text((0, 0), "Hello World!", font=font)
img.save("out.bmp")
输出图像:
我需要在 ImageMagick 中生成文本的低分辨率黑白图像。这些图像将绘制在一个小型 LED 矩阵中。文本需要有 7 个像素的高度。
目前,我正在使用:
convert -negate -threshold 15% -font Courier -size 80x11 caption:'hello' out.bmp
输出图像:
即使高度超过我的需要,由于低分辨率和抗锯齿校正,字母也不漂亮和对称。有没有人这样做并且可以帮助我?
版本:ImageMagick 6.8.9-9 Q16x86_64
您没有告诉我们什么版本的 ImageMagick 或平台,也没有显示您的结果让我们看看可能有什么问题。您的 ImageMagick 语法也不正确,尽管 ImageMagick 6 相当宽容。
这是我使用 ImageMagick 6.9.10.8 Q16 Mac OSX Sierra 得到的结果。第一个输出为 8 像素高,第二个输出缩放 1000% (10x)。
这个论坛好像没有把bmp转换成可用的显示格式,所以我用GIF代替了BMP。但无论是 BMP 还是 GIF,我的结果看起来都一样
convert -size x8 -font Courier label:'hello' -negate -threshold 20% +write out.gif -scale 1000% out2.gif
我试过改变阈值,但更大或更小的值会使情况变得更糟。大约 10-30% 的范围会产生相同的结果。
我也尝试过使用 -monochrome 代替 -threshold 并得到以下结果:
convert -size x8 -font Courier label:'hello' -negate -monochrome +write out3.gif -scale 1000% out4.gif
你可以试试点阵字体。参见 https://www.1001fonts.com/digital+dot-matrix-fonts.html?page=1&items=10。我一个都没试过。
我倾向于输出比要求大的字母,然后 trim 任何多余的备用 space 以充分利用可用的分辨率,然后根据您的特定需要调整大小:
convert -size 320x32 -font Courier label:'hello' -trim +repage -resize 80x8 +write out.gif
马克,我想他想要二进制结果。但是你有一个绝妙的主意。
让我们采用 Mark 的结果,阈值然后缩小到 8 像素高。这个 ImageMagick 命令似乎比我之前的 post 更有效。
马克的输出:
convert wcwuj.gif -threshold 60% +write thresh.gif -scale x8 result.gif
阈值结果:
缩放结果:
也许让 Mark 的图像更大并选择更好的阈值会产生更好的结果。
您可以尝试一些旧的 X11 字体。这些是手绘的,而不是从一组曲线中渲染出来的,所以它们在非常小的尺寸下看起来很好。
例如,如果我 运行 xfontsel
我得到这样的东西(为清楚起见放大):
看看/usr/share/fonts/X11/misc
。
我找到的解决方案是使用 TrueType 字体。刚刚从 Internet 上获得了一个免费字体,并按照其设计的大小使用了它。
P.S.: 也切换到 OpenCV。我的 Python 应用动态生成图像。每分钟调用 ImageMagick 几次(可能接近一百次)的成本太高了。
发布一个片段,希望对您有所帮助。
import cv2 as cv
from PIL import ImageFont, ImageDraw, Image
# Creates a black image with 80x10 size
img = Image.new('RGBA', (80, 10), (0,0,0,0))
draw = ImageDraw.Draw(img)
# Load TrueType font of height size 8
font = ImageFont.truetype("font.ttf", 8)
# Draw text using the loaded font
draw.text((0, 0), "Hello World!", font=font)
img.save("out.bmp")
输出图像: