You are hereLinux / imagemagick
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
