我有大图https://buildyourboard.pro/userboards/board-img/data/clipart.png
如何通过透明(或其他)背景将此图像细分为小图像?
图片不在网格中,因此代码应该找到图片中每张图片的位置
答案 0 :(得分:2)
如果您运行此命令,它会将所有像素加入到只有一个像素宽且具有图像原始高度的图像中。然后,您将看到所有包含单词none
的行对应于您可以在图像上绘制水平线而不与任何纸板背景相交的所有位置:
convert boards.png -resize 1x! txt: | more
# ImageMagick pixel enumeration: 1,4667,255,srgba
0,0: (0,0,0,0) #00000000 none
0,1: (0,0,0,0) #00000000 none
0,2: (0,0,0,0) #00000000 none
...
...
...
0,547: (0,0,0,0) #00000000 none
0,548: (0,0,0,0) #00000000 none
0,549: (0,0,0,0) #00000000 none
0,550: (0,0,0,0) #00000000 none
0,551: (0,0,0,0) #00000000 none
0,552: (0,0,0,0) #00000000 none
0,553: (0,0,0,0) #00000000 none
0,554: (0,0,0,0) #00000000 none
0,555: (39038,36633,35446,0) #988F8A00 srgba(152,143,138,0)
0,556: (38889,36248,34984,12) #978D8800 srgba(151,141,136,0.000183108)
0,557: (38348,35253,33873,75) #95898400 srgba(149,137,132,0.00114443)
0,558: (35061,31775,30664,98) #887C7700 srgba(136,124,119,0.00149538)
0,559: (33894,30508,29428,164) #84777301 srgba(132,119,115,0.00250248)
0,560: (34379,30968,29853,243) #86787401 srgba(134,120,116,0.00370794)
现在你可以看到第一个地方从水平线上没有任何东西到第555行。所以基本上,你想要检测它从none
变为什么。
通过这样的awk
即可轻松完成:
convert boards.png -resize 1x! txt: | awk 'inside && /none/{inside=0;print;next} !inside && ! /none/{inside=1;print}'
# ImageMagick pixel enumeration: 1,4667,255,srgba
0,0: (0,0,0,0) #00000000 none
0,555: (39038,36633,35446,0) #988F8A00 srgba(152,143,138,0)
0,911: (0,0,0,0) #00000000 none
0,1082: (36701,34188,35001,0) #8F858800 srgba(143,133,136,0)
0,1433: (0,0,0,0) #00000000 none
0,1570: (33489,32153,32838,4) #827D8000 srgba(130,125,128,6.10361e-05)
0,1937: (0,0,0,0) #00000000 none
0,2135: (29884,28945,29339,4) #74717200 srgba(116,113,114,6.10361e-05)
0,2486: (0,0,0,0) #00000000 none
0,2621: (28668,27300,25241,5) #706A6200 srgba(112,106,98,7.62951e-05)
0,2972: (0,0,0,0) #00000000 none
0,3216: (35066,32529,28581,2) #887F6F00 srgba(136,127,111,3.0518e-05)
0,3612: (0,0,0,0) #00000000 none
所以,现在我们知道我们可以在第555,911,1082,1433行等处对图片进行横向切割。
我会像这样绘制前3行:
convert boards.png -stroke red -draw "line 0,555 12000,555" -draw "line 0,911 12000,911" -draw "line 0,1082 12000,1082" result.jpg
现在,你沿着这些方向切入 - 像这样:
convert boards.png -crop x911+0+0 row1.jpg
convert boards.png -crop x416+911+1082 row2.jpg
然后在垂直方向上应用完全相同的过程,将-resize 1x!
替换为-resize x1!
。