You are hereBlogs / Amedee's blog / Foto's in batch verkleinen met imagemagick

Foto's in batch verkleinen met imagemagick


By Amedee - Posted on 22 November 2009

Gisteren stelde Monica Monté een interessante vraag op Twitter: "Bestaat er een manier om een hoop foto's (+100) in een batch te verkleinen (7mb >1mb) Via Photoshop, Lightroom, Bridge,...?"

Ik vind het een rare vraag omdat bestandsgrootte een ééndimensionaal gegeven is, terwijl foto's eigenlijk 3 dimensies hebben: lengte, breedte en kleurdiepte. Of 2 dimensies, als je alleen van lengte en breedte spreekt, en het aantal kleuren gelijk blijft in je omzetting. Bovendien, bij JPEG-compressie (daar bleek het achteraf inderdaad om te gaan) is het bij een foto waarvan je alleen de lengte en breedte weet, quasi onmogelijk om te voorspellen wat de bestandsgrootte gaat zijn, zonder het jpeg-compressiealgoritme uit te voeren. 2 verschillende foto's maar met exact dezelfde lengte en breedte zullen meestal een verschillende grootte hebben. Soit, Monica moet bij gelegenheid maar eens uitleggen wat ze bedoelde.

Er waren direct een aantal mensen die deze sympathieke fotoredactrice ter hulp snelden met hun advies voor zware softwarepakketten zoals Lightroom (@Jannemans, @mbargo, @bartclaeys, @Schuppe), iPhoto (@boskabout), Photoshop (@broodkast, @kodel, @eyeballkid), Picasa (@raf__) en Irfanview (@vdbvdb). @robindheer zat ook met dezelfde vraag: hoe verklein je foto's in batch?

Maar mensen, waarom allemaal zo moeilijk doen? Zoals ik gisteren al schreef op Twitter: het in batch verkleinen van afbeeldingen is iets waarvoor imagemagick ideaal geschikt is.
Ubuntu beschrijft het als volgt:

amedee@fangorn:~$ apt-cache show imagemagick
Package: imagemagick
Priority: optional
Section: graphics
Installed-Size: 348
Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: ImageMagick Packaging Team <pkg-gmagick-im-team@lists.alioth.debian.org>
Architecture: amd64
Version: 7:6.5.1.0-1.1ubuntu3
Depends: libbz2-1.0, libc6 (>= 2.3.4), libfreetype6 (>= 2.2.1), libgomp1 (>= 4.2.1),
 libice6 (>= 1:1.0.0), libjpeg62, liblcms1 (>= 1.15-1), libltdl7 (>= 2.2.6a), libmagickcore2,
 libmagickwand2, libsm6, libtiff4, libx11-6, libxext6, libxt6, zlib1g (>= 1:1.1.4)
Suggests: transfig, imagemagick-doc
Filename: pool/main/i/imagemagick/imagemagick_6.5.1.0-1.1ubuntu3_amd64.deb
Size: 95720
MD5sum: 87d33361ab2486f49c8ea077d8933eff
SHA1: b1a0da0347944a35984d40f7f85e94a52d576ae8
SHA256: 431d515a1b033b167f2517382e944ccdc60388bb326dd43adfc1f15a552a8a49
Description: image manipulation programs
 ImageMagick is a software suite to create, edit, and compose bitmap images.
 It can read, convert and write images in a variety of formats (over 100)
 including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript,
 SVG, and TIFF. Use ImageMagick to translate, flip, mirror, rotate, scale,
 shear and transform images, adjust image colors, apply various special
 effects, or draw text, lines, polygons, ellipses and Bézier curves.
 All manipulations can be achieved through shell commands as well as through
 an X11 graphical interface (display).
Homepage: http://www.imagemagick.org/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Task: kubuntu-desktop, kubuntu-netbook, edubuntu-desktop-gnome, edubuntu-desktop-kde,
 xubuntu-desktop
Don't panic, imagemagick bestaat ook voor al jullie Windows en Apple pointyclickers, zie http://www.imagemagick.org/script/binary-releases.php voor de downloadpagina.

Het omzetten van een groot aantal afbeeldingen is poepsimpel. Je geeft gewoon een van de volgende commando's in de directory waarin de te verkleinen afbeeldingen staan:

mogrify -resize 40% *.jpg
mogrify -resize 800x600 *.jpg
mogrify -resize 800 *.jpg
mogrify -resize 800x600! *.jpg
Dit geeft volgende resultaten:
  1. Verklein alle afbeeldingen naar 40% van hun oorspronkelijke afmeting.
  2. Verklein alle afbeeldingen zodat die binnen 800x600 pixels passen, met behoud van de aspect ratio.
  3. Verklein alle afbeeldingen zodat de breedte 800 pixels is.
  4. Verklein alle afbeeldingen zodat de afmeting exact 800x600 pixels is, waarbij de aspect ratio verloren mag gaan.
mogrify past de afbeeldingen in-place aan, dus de originelen worden overschreven. De om te zetten afbeeldingen zet je dus best op voorhand in een aparte directory, ofwel gebruik je convert ipv mogrify zodat je een nieuwe bestandsnaam kan (moet) meegeven.

Snelheidstest

Ik ben ervan overtuigd dat imagemagick véél efficiënter is dan al die GUI-programma's (met uitzondering misschien van lichtgewicht Irfanview). Daarom daag ik alle Windowsers en Appelaars uit voor een snelheidstest.

Ik heb 100 jpg-afbeeldingen gemaakt, allemaal bestaande uit willekeurige ruis. Je kan hier een kleiner voorbeeld (100x100) downloaden, of je kan ze ook zelf aanmaken met mijn bash scriptje img-create:

#!/bin/bash
for (( COUNTER=1; COUNTER<=100; COUNTER++ )) do
        convert -size 3000x3000 xc: +noise Random noise-"$COUNTER".jpg
        ls -hl noise-"$COUNTER".jpg
done
exit
Het aanmaken van de afbeeldingen duurde 11'3":
amedee@fangorn:/tmp$ time ./img-create
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:57 noise-1.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:57 noise-2.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:57 noise-3.jpg
...
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-98.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-99.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-100.jpg

real    11m3.026s
user    10m44.710s
sys     0m13.570s
Met het bash scriptje img-resize zet ik ze om naar een kleiner bestand:
#!/bin/bash
for filename in `ls noise*.jpg`; do
        convert $filename -resize 50% small-"$filename"
        ls -hl *"$filename"
done
exit
De omzetting duurde slechts 2'46":
amedee@fangorn:/tmp$ time ./img-resize
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-100.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:28 small-noise-100.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:58 noise-10.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:28 small-noise-10.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:58 noise-11.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:28 small-noise-11.jpg
...
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-98.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:30 small-noise-98.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 16:08 noise-99.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:31 small-noise-99.jpg
-rw-r--r-- 1 amedee amedee 7,6M 2009-11-22 15:58 noise-9.jpg
-rw-r--r-- 1 amedee amedee 1,5M 2009-11-22 17:31 small-noise-9.jpg

real    2m46.400s
user    3m37.430s
sys     0m10.530s
Wie doet het beter? Zet jouw resultaten in de reacties. Ik vraag me trouwens af hoe je op een betrouwbare manier de snelheid van Lightroom of Photoshop kunt meten, zonder gebruik te maken van een cronometer.

Monica heeft een dag moeten wachten op je uitleg, tot daar de snelheidswinst Nose Smile

Ze heeft geen dag moeten wachten, ik heb gisteren al het advies gegeven om imagemagick te gebruiken. Zie http://twitter.com/amedee/status/5923054317
Ik heb nu gewoon in detail uitgeschreven hoe snel imagemagick is, en hoe ik dat getest heb.

[...] Foto's in batch verkleinen met imagemagick | ..:: amedee.be ::.. amedee.be/fotos-batch-verkleinen-imagemagick – view page – cached Gisteren stelde Monica Monté een beetje een rare vraag op Twitter: "Bestaat er een manier om een hoop foto's (+100) in een batch te verkleinen (7mb >1mb) Via Photoshop, Lightroom, Bridge,...?" [...]

Ik twijfel niet aan de kracht en efficientie van ImageMagick, gebruik het zelf ook, maar dan voornamelijk op webservers om automatisch de juiste bestanden aan te maken.
De verdienste (nu ja) van Photoshop is dat elke fotograaf ermee overweg kan. Dus ik denk dat Monica veel eerder een action gaat aanmaken in Photoshop dan dat ze een scriptje voor Lightroom gaat schrijven.
Dat je die Photoshop action dan ook nog eens autmatisch tot batch-programma kan maken door een Droplet te creëren zorgt ervoor dat mensen als Monica op een simpele manier hun eindresultaat kunnen bereiken.
Dat het super-onefficiënt is hoeft geen betoog: Als je een map met daarin 1000 foto's op zo een droplet laat vallen dan gaat 1000x een foto in Photoshop open en dicht, zeer oneffieciënt.
Maar wie weet, het is inderdaad maar 1 commando, als je dat in een *.cmd bestand zet en een vaste directory "convert" aanmaakt dan heeftMonica haar nieuwe super-tool misschien wel gevonden!

Inderdaad Koen, Monica moet alleen maar één van die 4 mogrify-regeltjes in een .cmd zetten. Meer is écht niet nodig.
Stel je eens voor dat het gaat om een foto-archief van 40.000 foto's. Ik denk bijvoorbeeld aan de wallpaper-collectie van houghi (zoek maar eens op Google). Die is 10 GiB groot, dus gemiddeld 250 KiB per foto. Houghi z'n conversie-scriptjes zijn ook gemakkelijk te vinden. Om zijn volledige wallpapercollectie om te zetten naar een bepaald formaat + voorzien van een watermerk, had hij maar een paar uurtjes nodig. Ik vrees dat het met Photoshop een paar dagen zou duren om 40.000 foto's te verwerken... Wink Nose

Trouwens, mijn doelpubliek zijn niet alleen de fotografen, maar ook (of vooral) de Linux geeks. Ik sta sinds kort op http://planet.grep.be Wink Nose

Mijn antwoord op die vraag, uitgaande van Windows weliswaar, is de gratis XP Powertoy van Microsoft 'Image Resize'. Rechtermuis op (groep) foto's, maximale grootte kiezen en op OK klikken. Easy as pie Nose Smile

Nice. Achter de schermen zal dat ook wel iets imagemagick-achtig doen. Trouwens als ik me niet vergis hebben Nautilus (Gnome) en Konqueror (KDE) ook een rechtermuismenu om juist hetzelfde te doen.
Hoe snel is die powertoy? Om bijvoorbeeld 100 jpg's van 3000x3000 (ongeveer 7,5 MiB) om te zetten naar 1500x1500 (ongeveer 1,5 MiB), hoe lang duurt dat?

Net een testje gedaan met 50 foto's van 21 MPix (3744*5616, gemiddeld zo'n 6 MB/stuk, Canon EOS 5D Mark II) naar max 1500x1500 en dat was ongeveer 3 seconden per foto. Let wel: aangezien ik 100% cpu-load had (Pentium M 2 GHz) en een laptop-hardeschijf niet van de snelste is, is de performance van m'n laptop eerder de bottleneck.

Ik denk bijgevolg ook dat élk van de performance van deze scriptjes en toepassingen sterk afhankelijk zijn van de machine waarop zij uitgevoerd worden.

Overigens, die powertoy is simpelweg een standalone-applicatie van hetgene wat er gebeurt als je een groep foto's wilt mailen in Windows, Windows suggereert dan ook om de foto's te verkleinen.
Doel van de powertoy is dan ook niet om de best mogelijke kwaliteit te geven, maar wel om bestanden 'doorstuurbaar' te maken.

Voor de volledigheid de link: http://www.microsoft.com/windowsxp/Downloads/powertoys/Xppowertoys.mspx

In dit geval bleek Imagemagick mss de beste oplossing, maar dit kan je niet voor alles gebruiken natuurlijk. Indien de bestanden die Monica nodig had bestemd waren voor een document om te drukken, dan dienden ze in CMYK te staan ipv RGB en best ook niet in jpg bestandsformaat. Bovendien moet je dan op de resolutie letten: 150dpi vr print, 300 vr druk bijvoorbeeld.

Ik denk niet dat je deze dingen kan aanpassen met kleine programmatjes. Photoshop geeft je een waaier van mogelijkheden. De andere programma's zijn slechts in enkele gevallen voordeliger. Bij verkleinen voor web bijvoorbeeld. Daarvoor is dit wel een handige oplossing.

Op Windows gebruik ik zelf ook geregeld de XP Powertoy, zoals meon hierboven vermeld heeft. Soms doe ik het ook met Lightroom, al kan ik dit niet aanraden voor heel grote batches.

Kortom: het hangt er een beetje vanaf waarvoor de bestanden moeten dienen. En het voordeel van Photoshop is dat je slechts 1 programma nodig hebt en je kan alles. De specifieke tools zijn slechts handig in specifieke gevallen.

@broodkast: Imagemagick kan perfect om met CMYK en RGB zenne, en heeft nog wel duizend andere opties ook. Photoshop daarentegen is duur!

@amedee: oud nieuws Wink Nose
http://cobbaut.blogspot.com/2009/08/resizing-images-for-lazy-people.html

groetjes,
paul

Jaaaaah... maar ik maak geen reclame voor mijn Linuxtraingen he Paul Tongue

Ik toch ook niet... ik maak enkel reklame voor pdf's die ik gratis weggeef. Ik zou het spijtig vinden als je dat als iets negatief gaat beschouwen Frown

Ik denk dat je mijn ironische smiley niet gezien hebt... Wink Nose

idd die had 'k gemist

In Windows 7 gaat dat ook!
Ik heb 100 jpg-afbeeldingen gemaakt met volgend batch-bestand:
http://pastie.org/710161
Het aanmaken van de afbeeldingen duurde 3'09" (Intel Core 2 Duo T7500 @ 2.20 GHz)

Dan nog een batch-bestand gemaakt om de bestanden kleiner te maken:
http://pastie.org/710336
De omzetting duurde 2'28":

Daarna de ultieme Picasa 3 test. Het mapje met de 100 jpg-afbeeldingen geopend in Picasa en resizen naar 50% Ik heb de chrono ingedrukt op het moment dat ik "OK" klikte en uitgedrukt op het moment dat het mapje met de geresizede afbeeldingen opende.

De omzetting duurde slechts 1'14"

Conclusie, Picasa is niet alleen gebruiksvriendelijker, maar ook sneller dan ImageMagick.

raf__ wrote:

Conclusie, Picasa is niet alleen gebruiksvriendelijker, maar ook sneller dan ImageMagick.

Verkeerde conclusie. Jouw "batch" is trager dan Picasa.

Als je convert of mogrify één keer zou starten om die jpg's te verkleinen, in plaats van voor elke jpg het programma op te starten, zou je een ander resultaat krijgen.

Nieuwe reactie inzenden

  • Textual smileys will be replaced with graphical ones.
  • Toegelaten HTML-tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <strike> <hr> <table> <tr> <td> <th>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo], [[foo]].
  • Adressen van webpagina's en e-mailadressen worden automatisch naar links omgezet.
  • Each email address will be obfuscated in a human readable fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.
  • You may quote other posts using [quote] tags.
  • Regels en paragrafen worden automatisch gesplitst.

Meer informatie over formaatmogelijkheden

Reclame... ;-)

Met dank aan
  • Jasmina
  • Celine
  • Pieter
  • Jeff
  • Hans
  • Jurgen
  • Jurgen
  • Marijke
  • Amedee
  • Erik
  • Danny
  • Sofie
  • Lars
  • Christophe
  • Peter
  • Jeroen
  • Jurgen
om mij een gratis herlading twv €15 te bezorgen!

Waar ben ik?