Ändra storlek på massor av bilder enkelt

av jonas den 2010/04/08

I ett projekt jag är involverad i skulle vi ändra storlek på massor av jpegbilder. Det handlade om en webbsida som ändrade bredd i innehållskolumnen och de befintliga bilderna var för stora. Jag gjorde som jag brukar, lösa problemet genom att skriva skriptet imagemigrate . När vi väl skulle köra skriptet i skarp miljö fungerade det inte av någon anledning, alla bilder ändrade inte storlek. Funderade lite på något jag mindes sedan långt tillbaka i Linux miljön, ImageMagick . Ville minnas kommandot convert som jag använt någon gång för att batch-konvertera fotografier i Linux. Problemet med convert skulle vara att jag skulle få alla bilder till samma storlek, vi ville ju bara krympa de bilder som var större än tillåten maxbredd på sidan.

Om bilden är bredare än 430 pixlar skall den krympas till 430 pixlar i bredd och behålla sin proportition i höjdled.

ImageMagick kommer med ett annat terminalprogram, identify. Med identify kunde jag få fram information om bilden:

$ identify GRODA.jpg
GRODA.jpg JPEG 200x202 200x202+0+0 8-bit DirectClass 25.5KiB 0.000u 0:00.000
Bilden GRODA.jpg är en JPEG-bild med storleken 200×202. Om jag vill krympa bredden på den skulle jag använda argumentet -resize till kommandot convert på det här sättet:
$ convert GRODA.jpg -resize 100x GRODA.jpg
Men om en bild inte är 100 pixlar bred? Låt säga att den är 50 pixlar bred och jag säger att den skall bli 100 pixlar? Det hade gett en granska rolig bild. Jag behövde alltså skriva ett skript som kontrollerar om originalbilden är bredare än en viss storlek och om den är det skall den krympas.
$ convert GRODA.jpg -resize 100x\> GRODA.jpg
\> innebär att convert skall köra resize om bilden är 100 pixlar eller högre. Motsvarande för x pixlar eller lägre är tecknet < .
Så då var det bara att börja skripta ihop något i Bash istället, eller behövs det? Kommandot find kan hjälpa mig att hitta filer i filsystemet och till kommandot find kan jag säga kör det här kommandot med varje fil du hittar. Så 182 rader PHP-kod ersattes med ett enda kommando i terminalen:
$ find . -iname '*.jpg' -exec convert '{}' -resize 430x\> '{}' \;
Hitta alla filer som har filändelsen .jpg eller .JPG och med alla filer du hittar skall du köra kommandot convert som krymper bilden till 430 pixlar i bredd om bilden är 430 pixlar eller bredare.
  • Snitsigt. Det här tipset lägger vi till samlingen. En vacker dag kommer det nog gott till användan!
blog comments powered by Disqus

Föregående post:

Nästa post: