You are hereBlogs / Amedee's blog / Foto's in batch verkleinen met imagemagick
Foto's in batch verkleinen met imagemagick
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:
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
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 800x600 *.jpg
mogrify -resize 800 *.jpg
mogrify -resize 800x600! *.jpg
- Verklein alle afbeeldingen naar 40% van hun oorspronkelijke afmeting.
- Verklein alle afbeeldingen zodat die binnen 800x600 pixels passen, met behoud van de aspect ratio.
- Verklein alle afbeeldingen zodat de breedte 800 pixels is.
- 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:
for (( COUNTER=1; COUNTER<=100; COUNTER++ )) do
convert -size 3000x3000 xc: +noise Random noise-"$COUNTER".jpg
ls -hl noise-"$COUNTER".jpg
done
exit
-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
img-resize zet ik ze om naar een kleiner bestand:
for filename in `ls noise*.jpg`; do
convert $filename -resize 50% small-"$filename"
ls -hl *"$filename"
done
exit
-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
Monica heeft een dag moeten wachten op je uitleg, tot daar de snelheidswinst
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...
Trouwens, mijn doelpubliek zijn niet alleen de fotografen, maar ook (of vooral) de Linux geeks. Ik sta sinds kort op http://planet.grep.be
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
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
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
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
Ik denk dat je mijn ironische smiley niet gezien hebt...
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.
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