这里有一个命令,可以读取输入图像,并创建一个带有黑色边框的480x360透明单元格,将这些单元格创建成与输入图像大小相同的网格,然后将该网格合成到输入图像上...
infile="MyPic.png"
convert "$infile" -size 480x360 -set option:distort:viewport "%[w]x%[h]" \
\( xc:none -shave 1x1 -compose copy -bordercolor black -border 1x1 \) \
-virtual-pixel tile -distort SRT 0 -compose over -composite output.png
这将使网格的线条变粗2像素。如果要使线条变细1像素,可以使用类似以下命令的方法...
convert "$infile" -size 480x360 -set option:distort:viewport "%[w]x%[h]" \
\( xc:none -chop 1x1 -background black -splice 1x1 \) \
-virtual-pixel tile -distort SRT 0 -compose over -composite \
-bordercolor black -shave 1x1 -compose copy -border 1x1 output.png
convert "$infile" \( +clone -channel A -evaluate set 0 +channel \
-crop 3x4@ -chop 1x1 -background black -splice 1x1 \) -background none \
-flatten -shave 1x1 -bordercolor black -border 1x1 output.png
该命令将创建输入图像的克隆并使其透明,使用“-crop 3x4@”将其裁剪成3x4个单元格的网格,在单元格的上边缘和左边缘放置黑色边框,然后通过将它们压平到输入图像上重新组装它们成为一个网格。最后,保留输入图像的原始尺寸,在右侧和底部边缘添加边框。
显然,如果输入图像不能被单元格数量均匀地分割,则这种方法可能导致单元格的尺寸不完全相同。
再次编辑:如果您实际上不需要网格作为覆盖层,您可以直接将图像裁剪成瓷砖,将黑线围绕瓷砖放置,并重新组装它们以创建所需的输出图像。可以使用以下简单命令完成此操作,以制作480x360大小的单元格...
convert "$infile" -background black -bordercolor black \
-crop 480x360 -chop 1x1 -splice 1x1 -flatten -shave 1x1 -border 1x1 output.png
或者你可以使用"-crop 3x3@",就像这样制作一个3行3列的网格,让ImageMagick尽可能地计算大小...
convert "$infile" -background black -bordercolor black \
-crop 3x3@ -chop 1x1 -splice 1x1 -flatten -shave 1x1 -border 1x1 output.png
如果图像大小不能被单元格数整除,那么某些单元格的尺寸将会有一个像素的差异。
我尝试过这个,但每一步都陷入了困境。以下是我目前得到的最好结果。
convert xc:white[1440x1080\!] -colorspace gray -fx "(i==0||i==479||i==959||i==1439||j==0||j==359||j==719||j==1079)?0:1" grid.png
因此,在实际使用中,您需要克隆您的雪景。然后将其转换为灰度图像(以将处理时间减少3倍),并将所有线条设置为黑色,其他像素设置为白色。然后覆盖到雪景上,在每个位置选择最暗的像素:
convert scene.jpg \( +clone -colorspace gray \
-fx "(i==0||i==479||i==959||i==1439||j==0||j==359||j==719||j==1079)?0:1" \) -compose darken -composite result.png
如果您希望它稍微更加智能并且适应不同大小的图像,您可以根据图像大小计算第三点:
magick scene.jpg \( +clone -colorspace gray \
-fx "(i==0||i==int(w/3)||i==2*int(w/3)||i==w-1||j==0||j==int(h/3)||j==2*int(h/3)||j==h-1)?0:1" \) \
-compose darken -composite result.png
convert blank.png -fill black -draw 'line 480,0 480,1080 line 960,0 960,1080 line 0,360 1440,360 line 0,720 1440,720' level1.png
但这一切都是手动的。
有没有自动化的方法?