original in en Katja Socher
en to ne: Rob Huls
Katja is de Duitse redacteur van LinuxFocus. Ze houdt van Tux, film, fotografie en de zee. Haar homepage kun je hier vinden.
Ooit, lang geleden, namen tovenaars hun basisingredienten, mengden ze in
een grote pot, zwaaiden met hun toverstokje, murmelden hun spreuken... en
opeens was iemand veranderd in een kikker. Tegenwoordig zijn tovenaars, net als
ieder ander in onze maatschappij, sterk gespecialiseerd en hun spreukenboek
bevat maar een paar bruikbare spreuken voor hele specifieke zaken. ImageMagick
is dan ook geen spreukenboek voor algemeen gebruik. In vele opzichten heeft het minder
toverkracht dan 'The Gimp' en andere grafische programma's, maar het heeft wat
specifieke spreuken die erg nuttig zijn.
Zijn grote kracht ligt in de mogelijkheid vele van zijn spreuken te
automatiseren als het vanaf de prompt wordt gebruikt.
Maar voordat we een aantal spreuken op je los gaan laten, zullen we eerst
kort de basisingredienten bekijken.
of Wat is ImageMagick
ImageMagick is een collectie grafische hulpprogramma's om met plaatjes te werken. Die hulpprogramma's zijn display, import, animate, montage, convert, mogrify, identify en combine.Om een hulpprogramma te gebruiken typ je de naam in gevolgd door de optie
die je wilt gaan gebruiken, het plaatje dat bewerkt moet worden en de naam van
het bestand waar je het wilt opslaan.
Als je bijvoorbeeld tux1.gif wil 'houtskolen' met een factor 3 en het resultaat wilt
opslaan als tux1charcoal.gif tik je in:
convert -characoal 3 tux1.gif tux1characoal.gif
Laten we na deze blik op de basisingredienten een paar spreuken bekijken.
convert -geometry 60x80 image.gif out.gifschaalt het plaatje image.gif naar een breedte van 60 en een hoogte van 80 en schrijft het resultaat naar out.gif.
#!/bin/sh for f in $* ;do convert -geometry 80x80 $f t_$f echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\"></a>" done # end of scriptTyp deze regels in in de texteditor van je keuze (vi, emacs, nedit, kedit, ...) en sla dit op als mksmallimage in je home directory. Ga dan naar de bash shell en tik
chmod 755 /home/katja/mksmallimage(gebruik je eigen home directory i.p.v. katja). Je kunt het script dan gebruiken door in te tikken
/home/katja/mksmallimage xxx.jpg *.gifHet converteert dan alle gif bestanden en het bestand xxx.jpg.
display "vid:*.jpg"Dit maakt een visueel overzicht van alle jpg-plaatjes in de huidige directory. Of:
display "vid:kikker/*"maakt een visueel overzicht van alle plaatjes in je 'kikker' directory.
<a href="file.gif"><img src="t_file.gif" width="60" height="80"></a>Het originele bestand is hier file.gif en de postzegel versie t_file.gif.
for f in $* ;do convert -geometry 80x80 $f t_$f echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">" doneHet bovenstaande script gaat alle plaatjes die op de prompt zijn opgegeven langs, genereert de postzegels en geeft de HTML code weer op het scherm. Die kun je dan kopieren in onze webpagina.
convert image.gif image.jpgConvert weet, door de extensie van de bestandsnaam, welk formaat het moet gebruiken.
for f in $* ;do if echo "$f" | grep -i "jpg$" > /dev/null ; then gif=`echo "$f" | sed 's/jpg$/gif/i'` echo "converting $f to $gif ..." convert 80x80 $f $gif else echo echo "$f is not a jpg file, ignored" fi doneEr zijn nog een heleboel andere formaten die Image Magick ook kent.
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpgDe optie "gravity SouthEast" plaatst logo.gif in de hoek linksonder. "compose Over" zegt dat we het plaatje willen vervangen waar de twee elkaar overlappen.
identify image.jpg results in image.jpg 340x254 DirectClass 13939b JPEG 0.1u 0:01Wat kan onze tovernaar hier nu mee doen? Nou, om goede webpagina's te ontwerpen die plaatjes weergeven terwijl de pagina nog geladen wordt, moet je de exacte afmetingen van alle plaatjes opgeven. De HTML code zou er als volgt uit zien:
<img src="image.jpg" width="340" height="254" alt="[sample picture]">Als onze plaatjes verschillende, onbekende afmetingen hebben, dan kunnen we identify gebruiken om ons te helpen. We schrijven een script dat de output van identify leest en deze regel weergeeft. De afmetingen staan vermeld op de tweede regel van de uitvoer. Om deze parameter te verkrijgen gebruiken we het commando awk:
identify image.jpg | awk '{print $2}' results in 340x254We moeten nu de maten splitsen in hoogte en breedte. Dit kan als volgt gedaan worden:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $1}'wat de breedte zou geven. De hoogte kan verkregen worden met:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $2}'Besteed niet te veeel aandacht aan de precieze shell commando's. Als je ze niet helemaal begrijpt, neem dan maar gewoon aan dat ze werken. In de volgende uitgave van LinuxFocus zit een artikel over het programmeren van de shell, waar we veel van de magie ervan zullen uitleggen. Het uiteindelijke script ziet er als volgt uit:
file=$1 geometry=`identify $file | awk '{print $2}'` # geometry can be 563x144+0+0 or 75x98 # we need to get rid of the plus (+) and the x characters: width=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $1}'` height=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $2}'` echo "<img src=\"$file\" width=\"$width\" height=\"$height\">"Om een volledig script te verkrijgen voegen we opnieuw wat helptekst en foutcorrectie toe. Hier is ons uiteindelijke script, genaamd imgsrcline:
Terwijl ik met ImageMagick aan het spelen was liep ik soms tegen discrepanties aan tussen de documentatie en de daadwerkelijke werking. Sommige opties zijn ook nog niet erg stabiel. Als je je echter bij de dingen houdt die we hierboven hebben gedemonstreerd, zul je zien dat het een nuttige set hulpprogramma's is. De bovenstaande functies werken. Ik heb ImageMagick-4.2.9 , ImageMagick-5.2.9 en ImageMagick-5.3.0 gebruikt en de dingen die je hier geleerd hebt werken met al deze versies.
Ik hoop dat je een idee hebt gekregen van wat je met ImageMagick kunt
doen en dat je de scripts zult gebruiken of zelfs je eigen spreuken zult maken.
Veel plezier!