Skilt / Tekstbillede

Publiceret: 3. oktober 2019 / Ændret: 14. juli 2020

Et billede/skilt til at give information f.eks. ved et skærmshow med billeder, eller som baggrund på en (login)skærm kan laves med convert fra ImageMagick.

Den simple danner et billede (her med gradienter oppefra og ned) – linjen efter viser resultatet med display:

convert -size 1920x1080 gradient:blue-green -gravity center -fill green -pointsize 80 -annotate +0+0 'Ubuntu MATE 18.04\n(32-bit)' ubuntu-MATE_18.04_32bit.png
display -resize 1200x675 ubuntu-MATE_18.04_32bit.png

Hvis jeg skal lave flere (næsten) ens skilte, er det nemmere at rette farver, tekst mv. med denne "one-liner" (marker alle linjer og copy/paste ind i terminalen):

color_1="blue"; \
color_2="red"; \
color_txt="black"; \
txt_str="TEST Ubuntu MATE 20.04\n(64-bit)"; \
f_name="Ubuntu-MATE-TEST_20.04_64bit.png" ; \
convert -size 1600x900 gradient:"$color_1"-"$color_2" -gravity center -fill "$color_txt" -pointsize 80 -annotate +0+0 "$txt_str" "$f_name" && display -resize 1200x675 "$f_name"

En diagonal gradient kræver at billedet roteres og startbilledet skal derfor være større end det færdige resultat. Ud fra læren om retvinklede trekanter kan størrelsen beregnes således for de to størrelser som har min interesse til skilte med gradienter fra øverste til modstående nederste hjørne:

Standard HD-TV størrelse:
√((1920÷2)²×2)+√((1080÷2)²×2)=2121,32

Ubuntu på min pc og skærm er mere skarp i bogstaverne ved 1600×900 som skærmindstilling:
√((1600÷2)²×2)+√((900÷2)²×2)=1767,76

Her med gradient fra øverste venstre hjørne ned til nederste højre hjørne – og lave en display af resultatet når billedet er dannet 🙂

convert -size 1768x1768 gradient:DeepSkyBlue-green -rotate -45 +repage -gravity center -crop 1600x900+0+0 +repage -gravity center -fill green -pointsize 80 -annotate +0+0 'Ubuntu MATE 18.04\n(64-bit)' ubuntu-MATE_18.04_64bit.png && display -resize 1200x675 ubuntu-MATE_18.04_64bit.png

Hvis jeg skal lave flere (næsten) ens skilte, er det nemmere at rette farver, tekst mv. med denne "one-liner" (marker alle linjer og copy/paste ind i terminalen):

color_1="blue"; \
color_2="red"; \
color_txt="black"; \
txt_str="TEST Ubuntu MATE 20.04\n(64-bit)"; \
f_name="Ubuntu-MATE-TEST_20.04_64bit.png" ; \
convert -size 1768x1768 gradient:"$color_1"-"$color_2" -rotate -45 +repage -gravity center -crop 1600x900+0+0 +repage -gravity center -fill "$color_txt" -pointsize 80 -annotate +0+0 "$txt_str" "$f_name" && display -resize 1200x675 "$f_name"

Link til farver og navne: https://www.imagemagick.org/script/color.php#color_names


Det er også muligt at lave et "overlay" til et eksisterende billede. De skulle være muligt at få et pænere resultat med overlay, men til disse eksempler kan jeg ikke rigtig se nogen fordel. Umiddelbart kræver det at jeg først laver et baggrundsbillede, og dernæst lægger et overlay med teksten ind over. Det kan sikkert gøres i et hug, men så dygtig er jeg ikke (endnu).

Overlay er mere kompleks, blandt andet kan det give en (uønsket) linje-ombrydning til flere linjer, hvis size er angivet for smal i forhold til højden – i eksemplet her er det 800×200:

Første linje laver et baggrundsbillede, næste linje lægger et overlay på, og billedet vises når det er færdigt:

convert -size 1920x1080 gradient:yellow-green  baggrund.png
convert -background '#0000' -gravity center -fill green -size 800x200  caption:"Ubuntu MATE 18.04 LTS\n(32-bit)" baggrund.png  +swap  -composite  "baggrund-med-overlay.png" && display -resize 1200x675 "baggrund-med-overlay.png"