My project involve finding boxes in image and checking what inside them.
For debug and proof purpose, I have to plot captions on the pages.
The resulting imagemagick command looks like :
magick Q_College-001.dist.png -colorspace sRGB -stroke none -strokewidth 1 -background "rgba(0,255,0,0.3)" -size 37.8x29.4 caption:'84-1' -geometry +200.6+125.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 40.6x29.4 caption:'87-2' -geometry +519.2+125.8 -compose over -composite \
-background "rgba(0,255,0,0.3)" -size 53.2x30.8 caption:'317-3' -geometry +538.4+287.6 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 54.6x29.4 caption:'322-4' -geometry +639.2+287.8 -compose over -composite \
-background "rgba(0,255,0,0.3)" -size 54.6x29.4 caption:'463-5' -geometry +535.2+334.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 54.6x29.4 caption:'479-6' -geometry +638.2+337.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 53.2x29.4 caption:'605-7' -geometry +535.4+371.8 -compose over -composite -background "rgba(0,255,0,0.3)" -size 53.2x29.4 caption:'601-8' -geometry +637.4+370.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 54.6x28 caption:'728-9' -geometry +536.2+437 -compose over -composite -background "rgba(255,0,0,0.3)" -size 53.2x29.4 caption:'744-10' -geometry +636.4+438.8 -compose over -composite \
-background "rgba(0,255,0,0.3)" -size 54.6x30.8 caption:'999-11' -geometry +537.2+531.6 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 54.6x30.8 caption:'1005-12' -geometry +636.2+531.6 -compose over -composite -background "rgba(0,255,0,0.3)" -size 54.6x29.4 caption:'1483-13' -geometry +534.2+748.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 54.6x29.4 caption:'1489-14' -geometry +631.2+748.8 -compose over -composite \
-background "rgba(0,255,0,0.3)" -size 56x32.2 caption:'1595-15' -geometry +534+782.4 -compose over -composite -background "rgba(255,0,0,0.3)" -size 53.2x29.4 caption:'1589-16' -geometry +630.4+782.8 -compose over -composite \
-background "rgba(0,255,0,0.5)" -size 53.2x29.4 caption:'1762-17' -geometry +534.4+877.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 54.6x30.8 caption:'1767-18' -geometry +631.2+877.6 -compose over -composite -background "rgba(0,255,0,0.3)" -size 53.2x29.4 caption:'1837-19' -geometry +535.4+928.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 53.2x29.4 caption:'1827-20' -geometry +630.4+926.8 -compose over -composite -background "rgba(255,0,0,0.3)" -size 54.6x29.4 caption:'1890-21' -geometry +536.2+977.8 -compose over -composite \
-background "rgba(0,255,0,0.3)" -size 51.8x30.8 caption:'1886-22' -geometry +628.6+976.6 -compose over -composite -background "rgba(0,255,0,0.5)" -size 80.8x32 caption:'194-23' -geometry +878.1+221 -compose over -composite \
-background "rgba(0,255,0,0.5)" -size 72x32 caption:'198-24' -geometry +1091+221 -compose over -composite -background "rgba(0,255,0,0.5)" -size 80x32.8 caption:'189-25' -geometry +1291+220.1 -compose over -composite \
-background "rgba(0,255,0,0.5)" -size 80.8x44.8 caption:'276-26' -geometry +878.1+262.6 -compose over -composite -background "rgba(0,255,0,0.5)" -size 72x44.8 caption:'280-27' -geometry +1091+262.6 -compose over -composite \
-background "rgba(0,255,0,0.5)" -size 80x44 caption:'286-28' -geometry +1291+262.5 -compose over -composite -background "rgba(255,0,0,0.5)" -size 81.6x44 caption:'418-29' -geometry +878.2+318.5 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 72x44.8 caption:'404-30' -geometry +1091+317.6 -compose over -composite -background "rgba(255,0,0,0.5)" -size 79.2x44.8 caption:'411-31' -geometry +1291.9+317.6 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 81.6x45.6 caption:'558-32' -geometry +878.2+373.7 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 72x45.6 caption:'563-33' -geometry +1091+373.7 -compose over -composite -background "rgba(255,0,0,0.5)" -size 79.2x44.8 caption:'570-34' -geometry +1291.9+373.6 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 81.6x32.8 caption:'695-35' -geometry +878.2+429.1 -compose over -composite -background "rgba(0,255,0,0.5)" -size 72x31.2 caption:'701-36' -geometry +1091+428.9 -compose over -composite \
-background "rgba(0,255,0,0.5)" -size 80x32.8 caption:'691-37' -geometry +1291+428.1 -compose over -composite -background "rgba(255,0,0,0.5)" -size 80.8x31.2 caption:'869-38' -geometry +878.1+468.9 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 72x32 caption:'859-39' -geometry +1091+468 -compose over -composite -background "rgba(0,255,0,0.5)" -size 80x32 caption:'865-40' -geometry +1291+468 -compose over -composite -background "rgba(255,0,0,0.5)" -size 80.8x32 caption:'952-41' -geometry +878.1+508 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 72x32 caption:'957-42' -geometry +1091+508 -compose over -composite -background "rgba(255,0,0,0.5)" -size 80x32 caption:'948-43' -geometry +1291+507 -compose over -composite -background "rgba(255,0,0,0.5)" -size 80.8x57.6 caption:'1069-44' -geometry +878.1+551.2 -compose over -composite -background "rgba(255,0,0,0.5)" -size 72x57.6 caption:'1072-45' -geometry +1091+551.2 -compose over -composite -background "rgba(255,0,0,0.5)" -size 80x58.4 caption:'1063-46' -geometry +1291+550.3 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 80.8x44.8 caption:'1193-47' -geometry +878.1+621.6 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 72x44.8 caption:'1198-48' -geometry +1091+621.6 -compose over -composite \
-background "rgba(255,0,0,0.5)" -size 80x44.8 caption:'1203-49' -geometry +1291+621.6 -compose over -composite -background "rgba(0,255,0,0.3)" -size 53.2x29.4 caption:'1331-50' -geometry +1202.4+688.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 53.2x29.4 caption:'1326-51' -geometry +1304.4+687.8 -compose over -composite -background "rgba(0,255,0,0.3)" -size 54.6x29.4 caption:'1403-52' -geometry +1201.2+722.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 54.6x29.4 caption:'1397-53' -geometry +1306.2+721.8 -compose over -composite -background "rgba(0,255,0,0.3)" -size 53.2x29.4 caption:'1685-54' -geometry +1204.4+835.8 -compose over -composite \
-background "rgba(255,0,0,0.3)" -size 51.8x28 caption:'1691-55' -geometry +1301.6+836 -compose over -composite Q_College-001.dist.ans.png
It takes more than 30 sec to write the resulting image (PNG is 1500x , can't be smaller for box computing...).
Is there a way to obtain the result faster ?
I try to remove -compose over -composite but the concerned caption don't print.....
Thanks for your help
Michel
If I were writing this command, simply for clarity, I'd probably individually build each caption and set its paging geometry inside a set of parentheses, then composite all of them onto the input image all at once at the end with "-flatten".
magick Q_College-001.dist.png -colorspace sRGB -stroke none -strokewidth 1 \
\( -background "rgba(0,255,0,0.3)" -size 37.8x29.4 caption:'84-1' -set page +200.6+125.8 \) \
\( -background "rgba(255,0,0,0.3)" -size 40.6x29.4 caption:'87-2' -set page +519.2+125.8 \) \
...
\( -background "rgba(0,255,0,0.3)" -size 53.2x29.4 caption:'1685-54' -set page +1204.4+835.8 \) \
\( -background "rgba(255,0,0,0.3)" -size 51.8x28 caption:'1691-55' -set page +1301.6+836 \) \
-flatten Q_College-001.dist.ans.png
On my moderate speed Windows 10 machine the full command runs in about 7 seconds with or without those modifications.
thanks again for help. I share a totally different (and ways faster) approach. The only drawback I found is not using -caption, which means I have to fix a standard font-size for text. In my case, this is not a big issue. If somebody knows how to emulate -caption in SVG/MVG...
magick source.png -colorspace sRGB -draw " fill rgba(255,0,0,0.3) rectangle 200.6,125.8 238.4,155.2 rectangle 639.2,287.8 693.8,317.2 rectangle 638.2,337.8 692.8,367.2 rectangle 535.4,371.8 588.6,401.2 rectangle 636.4,438.8 689.6,468.2 rectangle 636.2,531.6 690.8,562.4 rectangle 631.2,748.8 685.8,778.2 rectangle 630.4,782.8 683.6,812.2 rectangle 631.2,877.6 685.8,908.4 rectangle 630.4,926.8 683.6,956.2 rectangle 536.2,977.8 590.8,1007.2 rectangle 1202.4,688.8 1255.6,718.2 rectangle 1201.2,722.8 1255.8,752.2 rectangle 1204.4,835.8 1257.6,865.2
fill rgba(0,255,0,0.3) rectangle 519.2,125.8 559.8,155.2 rectangle 535.2,334.8 589.8,364.2 rectangle 637.4,370.8 690.6,400.2 rectangle 537.2,531.6 591.8,562.4 rectangle 534.2,748.8 588.8,778.2 rectangle 535.4,928.8 588.6,958.2 rectangle 628.6,976.6 680.4,1007.4 rectangle 1304.4,687.8 1357.6,717.2 rectangle 1306.2,721.8 1360.8,751.2 rectangle 1301.6,836 1353.4,864
fill rgba(0,255,0,0.5) rectangle 538.4,287.6 591.6,318.4 rectangle 536.2,437 590.8,465 rectangle 534,782.4 590,814.6 rectangle 534.4,877.8 587.6,907.2 rectangle 878.1,221 958.9,253 rectangle 1091,221 1163,253 rectangle 878.1,262.6 958.9,307.4 rectangle 1091,262.6 1163,307.4 rectangle 1291,428.1 1371,460.9
fill rgba(255,0,0,0.5) rectangle 1291,220.1 1371,252.9 rectangle 1291,262.5 1371,306.5 rectangle 878.2,318.5 959.8,362.5 rectangle 1091,317.6 1163,362.4 rectangle 1291.9,317.6 1371.1,362.4 rectangle 878.2,373.7 959.8,419.3 rectangle 1091,373.7 1163,419.3 rectangle 1291.9,373.6 1371.1,418.4 rectangle 878.2,429.1 959.8,461.9 rectangle 1091,428.9 1163,460.1 rectangle 878.1,468.9 958.9,500.1 rectangle 1091,468 1163,500 rectangle 1291,468 1371,500 rectangle 878.1,508 958.9,540 rectangle 1091,508 1163,540 rectangle 1291,507 1371,539 rectangle 878.1,551.2 958.9,608.8 rectangle 1091,551.2 1163,608.8 rectangle 1291,550.3 1371,608.7 rectangle 878.1,621.6 958.9,666.4 rectangle 1091,621.6 1163,666.4 rectangle 1291,621.6 1371,666.4
fill darkblue font-size 13 text 200.6,135.8'84-1' text 519.2,135.8'87-2' text 538.4,297.6'317-3' text 639.2,297.8'322-4' text 535.2,344.8'463-5' text 638.2,347.8'479-6' text 535.4,381.8'605-7' text 637.4,380.8'601-8' text 536.2,447'728-9' text 636.4,448.8'744-10' text 537.2,541.6'999-11' text 636.2,541.6'1005-12' text 534.2,758.8'1483-13' text 631.2,758.8'1489-14' text 534,792.4'1595-15' text 630.4,792.8'1589-16' text 534.4,887.8'1762-17' text 631.2,887.6'1767-18' text 535.4,938.8'1837-19' text 630.4,936.8'1827-20' text 536.2,987.8'1890-21' text 628.6,986.6'1886-22' text 878.1,231'194-23' text 1091,231'198-24' text 1291,230.1'189-25' text 878.1,272.6'276-26' text 1091,272.6'280-27' text 1291,272.5'286-28' text 878.2,328.5'418-29' text 1091,327.6'404-30' text 1291.9,327.6'411-31' text 878.2,383.7'558-32' text 1091,383.7'563-33' text 1291.9,383.6'570-34' text 878.2,439.1'695-35' text 1091,438.9'701-36' text 1291,438.1'691-37' text 878.1,478.9'869-38' text 1091,478'859-39' text 1291,478'865-40' text 878.1,518'952-41' text 1091,518'957-42' text 1291,517'948-43' text 878.1,561.2'1069-44' text 1091,561.2'1072-45' text 1291,560.3'1063-46' text 878.1,631.6'1193-47' text 1091,631.6'1198-48' text 1291,631.6'1203-49' text 1202.4,698.8'1331-50' text 1304.4,697.8'1326-51' text 1201.2,732.8'1403-52' text 1306.2,731.8'1397-53' text 1204.4,845.8'1685-54' text 1301.6,846'1691-55' " result.jpg
Not sure if this is convert problem or bash, since I have not seen similar issue in other bash scripts.
Core script as following. The $text is "( img,white30.png,0,0,30,30 img,white30.png,560,320,30,30 3℃ img,iconall.png,0,0,24,24 img,iconall.png,200,0,24,24 '<3级' )". The result is supposed to be a $color-ed roundrectangle, with "image image 3℃ image image <3级" (no space) on it.
If I manually execute the logic, all fine. But when I run the script with -x, I got a confusing sequence of commands (see the last part of the question) and result picture (The 3℃ part is just blank with seems-about-right place held).
convert -size "${w}x${h}" canvas:transparent -fill "${color}" -draw "roundrectangle 0,0,${w},${h},15,15" "PNG32:${iPic}"
local x=0
for i in "${text[#]}"; do
if [[ "${i}" == img,* ]]; then
IFS=, read -r img filename x1 y1 w1 h1 <<< "${i}"
convert "${filename}" -crop "${w1}x${h1}+${x1}+${y1}" - |
convert "${iPic}" - -gravity northwest -geometry "+${x}+$(( (h - h1) / 2 ))" -composite "${oPic}"
else
local wxh
wxh="$(textSize "${i}")"
w1="$(cut -dx -f1 <<< "${wxh}")"
convert -size "${w}x${h}" canvas:black -fill white -draw "roundrectangle 0,0,${w},${h},15,15" PNG32:- |
convert - canvas:white -fill black -pointsize 40 -font Noto-Sans-Mono-CJK-SC-Regular -gravity northwest -annotate "+${x}+0" "${i}" PNG32:- |
convert "${iPic}" - -alpha Off -compose CopyOpacity -composite "${oPic}"
fi
x=$(( x + w1 ))
cp -f "${oPic}" "${iPic}"
done
convert "${src}" "${oPic}" -gravity "${gravity}" -geometry "${position}" -composite "${dest}"
bash -x output (only calls to convert):
+++ convert -debug annotate xc: -font Noto-Sans-Mono-CJK-SC-Regular -pointsize 40 -annotate 0 3℃ null:
+++ convert -debug annotate xc: -font Noto-Sans-Mono-CJK-SC-Regular -pointsize 40 -annotate 0 '<3级' null:
+ convert -size 254x59 canvas:transparent -fill '#8fa6bc' -draw 'roundrectangle 0,0,254,59,15,15' PNG32:/tmp/tmp.zBBu2pNx1h
+ convert white30.png -crop 30x30+0+0 -
+ convert /tmp/tmp.zBBu2pNx1h - -gravity northwest -geometry +0+14 -composite /tmp/tmp.lPXXH4jNsW
+ convert white30.png -crop 30x30+560+320 -
+ convert /tmp/tmp.zBBu2pNx1h - -gravity northwest -geometry +30+14 -composite /tmp/tmp.lPXXH4jNsW
+++ convert -debug annotate xc: -font Noto-Sans-Mono-CJK-SC-Regular -pointsize 40 -annotate 0 3℃ null:
+ convert -size 254x59 canvas:black -fill white -draw 'roundrectangle 0,0,254,59,15,15' PNG32:-
+ convert - canvas:white -fill black -pointsize 40 -font Noto-Sans-Mono-CJK-SC-Regular -gravity northwest -annotate +60+0 3℃ PNG32:-
+ convert /tmp/tmp.zBBu2pNx1h - -alpha Off -compose CopyOpacity -composite /tmp/tmp.lPXXH4jNsW
+ convert iconall.png -crop 24x24+0+0 -
+ convert /tmp/tmp.zBBu2pNx1h - -gravity northwest -geometry +122+17 -composite /tmp/tmp.lPXXH4jNsW
+ convert iconall.png -crop 24x24+200+0 -
+ convert /tmp/tmp.zBBu2pNx1h - -gravity northwest -geometry +146+17 -composite /tmp/tmp.lPXXH4jNsW
+++ convert -debug annotate xc: -font Noto-Sans-Mono-CJK-SC-Regular -pointsize 40 -annotate 0 '<3级' null:
+ convert -size 254x59 canvas:black -fill white -draw 'roundrectangle 0,0,254,59,15,15' PNG32:-
+ convert - canvas:white -fill black -pointsize 40 -font Noto-Sans-Mono-CJK-SC-Regular -gravity northwest -annotate +170+0 '<3级' PNG32:-
+ convert /tmp/tmp.zBBu2pNx1h - -alpha Off -compose CopyOpacity -composite /tmp/tmp.lPXXH4jNsW
+ convert - /tmp/tmp.lPXXH4jNsW -gravity southeast -geometry +0+300 -composite -