Tråden om ImageMagick

Tråden skapades och har fått 27 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2010-08-05 02:30

Jag tänkte att jag skulle starta en tråd där vi kan diskutera angelägenheter beträffande ImageMagick, gratisprogrammet där du editerar dina bilder direkt ifrån OS X:s terminal, nerd style

Personligen så installerade jag programmet eftersom jag behövde editera ett stort antal bilder och inte hade någon lust att manuellt gå igenom varenda bild. Denna typ av så kallade batch-editeringar kan man göra på många olika sätt, i många olika program, men jag fann mig själv tycka om ImageMagicks approach, som är väldigt snabb och precis.

Nedan följer en kort beskrivning av hur man installerar programmet samt ett enklare exempel på hur det kan användas.

Installation

Det smidigaste sättet att installera programmet är, tro det eller ej, inte att surfa till programmets officiella hemsida, http://www.imagemagick.org, och ladda hem vad man hittar, utan att istället trycka in The MacPorts Project -- Home i sin webläsare, klicka på "installing MacPorts" och ladda hem lämplig installationsfil. MacPorts är ett program som tillåter dig att installera och uppgradera en hel drös med open source-program till OS X genom terminalen.

När du har installerat detta program öppnar du ett terminalfönster och skriver "sudo port install ImageMagick" och trycker enter. Sedan anger du ditt lösenord och går och gör någonting annat ett tag. Installationsprocessen tar ett tag, men det är det värt.

När installationen är klar är du redo att använda ImageMagick, direkt ifrån terminalen.

Användning

Du använder ImageMagick genom att navigera till den katalog du har dina bilder i (du gör detta med hjälp av kommandona "ls", "cd .." och "cd {katalognamn}") och sedan helt enkelt skriva ett kommando. Under "Command-line tools" på ImageMagicks officiella hemsida hittar du all information du behöver om detta, men för att du ska få en känsla för hur det kan se ut så tänkte jag här presentera vad det är som jag gjorde.

Exempel

Jag ville göra två saker med mina bilder: Göra dem svartvita samt förändra deras upplösning, men på ett sätt där bilden klipptes vid förminskning i sidled, snarare än att tryckas ihop.

Låt oss först titta på hur kommandot för detta ser ut om man bara vill manipulera en bild (låt oss säga att dess namn är image.jpg):

convert image.jpg -colorspace Gray -resize x762 -gravity center -extent 562x762 image_modified.jpg

Det första kommandot, "convert", är ett av ImageMagicks alla grundkommandon som kommer först och anger att jag vill konvertera bilden på något sätt (om jag hade valt att skriva till exempel "Display" här, följt av någonting annat, så hade jag kunnat titta på bilden). Sedan kommer namnet på bilden som jag vill manipulera, "image.jpg".

Efter detta kommer "-colorspace Gray". "-colorspace" är ett av en mängd olika kommandon som jag kan köra i ImageMagick. Efter detta kommer "Gray" vilket är en mer precis instruktion till "-colorspace"-kommandot. I det här fallet anger jag att hela bilden ska målas upp med olika gråtoner (för en verklig svartvit effekt, pröva kommandot "-monochrome").

Härnäst har jag knappat in "-resize" vilket, som namnet möjligen avslöjar, är ett kommando som förändrar storleken på bilden. Här har jag angett "x762" som min parameter, vilket innebär att höjden sätts till 762 pixlar och att bredden på bilden sätts till vad som behövs för att proportionen mellan de båda sidorna ska behållas.

Till sist kör jag två stycken kommandon: "-gravity" och "-extent". Vad jag är ute efter här är att förändra canvasstorleken på bilden och i samma veva klippa bort det som inte får plats. Om jag bara hade skrivit "-extent 562x762" så hade bilden klippts ifrån höger. Då jag dock har motiv som är centrerade i bilden så önskar jag att det ska klippas lika mycket på båda sidorna, varför jag innan "-extent"-kommandot har lagt in "-gravity center".

Allra sist anger jag vad jag vill att den nya bilden ska heta, i det här fallet "image_modified.jpg".

För att editera ett gäng med bilder samtidigt använde jag mig av följande kommando:

mogrify -colorspace Gray -resize x762 -gravity center -extent 562x762 *

Här är mitt första kommando inte "convert" utan "mogrify". "mogrify" editerar bilderna på samma sätt som "convert" med den skillnaden att originalbilden inte sparas utan skrivs över. Detta kan naturligtvis vara farligt om man inte har någon backup av bilderna, men i mitt fall var det den smidigaste vägen att gå.

Som synes finns i detta kommando ingen direkt referens till någon specifik bild, vilket inte är så konstigt eftersom jag vill editera alla bilder som ligger i den aktuella katalogen. Istället har jag bara lagt in en "*" på slutet vilket betyder att "mogrify" ska utföra den specificerade funktionen på alla filer den kan.

Sammanfattning

I mitt tycke så är ImageMagick ett väldigt enkelt och smidigt program, som framförallt ger en känsla av kontroll över sitt material. Att det sedan går att skapa rätt imponerande tingestar genom användning av till exempel shell script (ett program som körs i terminalen och som kan köra olika terminalkommandon) gör att programmet kan ha väldigt många olika användningsområden.

Senast redigerat 2010-08-05 13:27

Inte ens i min vildaste fantasi kunde jag föreställa mig att man skulle editera bilder via terminalen..., kul och intressant.

Det gör man ju normalt inte heller om det rör sig om enstaka bilder, eller om man har ett visuellt program för att göra det, men det är ett kraftfullt program för den som t.ex. behöver manipulera bilder t.ex. för en webserver.

  • Medlem
  • Hillared
  • 2010-08-05 11:58

Imagemagick används rätt så ofta (om jag inte missminner mig) på webben som Richard nämner, forum mm där man kan ladda upp avatarer, många ställen kan man ladda upp bilder som avatar som är mycket större än kraven, men de förminskas automatiskt ner till rätt storlek och filtyp mm. Tror även att vissa bildgalleri online använder sig av det för att skapa thumbnails mm.
Det är ett sådant där program som inte syns, men gör vad det skall och gör det jäkligt bra

  • Medlem
  • Söderfors
  • 2010-08-05 12:06

Kul läsning...ska ta en titt på ImageMagick...
Tack, Pluffo!

  • Medlem
  • Stockholm
  • 2010-08-11 11:52

Ok. Då kan väl jag inviga själva frågedelen av tråden.

Jag försöker att skapa ett skript som gör så att alla mina bilder får samma gamma-värde. Jag har hittat kommandot "-auto-gamma" ( ImageMagick: Command-line Options ) som reducerar gamma-värdet med 50% men jag försöker fortfarande att hitta någonting som arbetar med ett mer absolut värde, så att jag kan få ungefär samma ljusstyrka på alla mina bilder.

Någon som har några tankar?

  • Medlem
  • Uppsala
  • 2010-08-11 18:16
Ursprungligen av Pluffo:

Ok. Då kan väl jag inviga själva frågedelen av tråden.

Jag försöker att skapa ett skript som gör så att alla mina bilder får samma gamma-värde. Jag har hittat kommandot "-auto-gamma" ( ImageMagick: Command-line Options ) som reducerar gamma-värdet med 50% men jag försöker fortfarande att hitta någonting som arbetar med ett mer absolut värde, så att jag kan få ungefär samma ljusstyrka på alla mina bilder.

Någon som har några tankar?

"-gamma 1.2" ger en 20% ljusare bild. "-gamma 0.8" ger en 20% mörkare bild. (Som jag har uppfattat det. För utförlig beskrivning se här).

Observera dock: Kommandona ovan förändrar bildens gamma värde relativt det tidigare värdet. Det går inte att ändra så att alla bilder får samma gamma-värden (så vida du inte vet vilket gamma värde som bilden ursprunglingen har.) Svårigheten ligger i att bilder rent naturligt är olika ljusa/mörka (tänk isbjörn i snöstorm eller svart katt i kolkällare).

  • Medlem
  • Stockholm
  • 2010-08-12 14:17

Dala: Tack för ditt svar, men jag är som sagt ute efter ett sätt att manipulera ett gäng bilder relativt varandra.

Jag arbetar med svart-vita bilder. Och vad jag är ute efter är någonting som skulle göra om både den vita isbjörnen i en snöstorm och den svarta katten i en kolkällare till helt gråa bilder (någonting som ligger mitt emellan alltså).

För att vara mer specifik. Jag söker efter någonting som går igenom varje pixel, registrerar hur mycket vitt den har i sig, och sedan justerar samtliga pixlar så att de tillsammans summeras ihop till ett visst värde.

Till exempel: Om vi tänker oss att vi har 256 olika lägen mellan svart och vitt, och en bild på 128x128 pixlar så skulle jag vilja finna ett kommando där jag kunde säga att det sammanlagda värdet till exempel skulle vara 128x128x128=2097152.

Detta skulle innebära att en helt vit bild blev helt grå och att en helt svart bild också blev helt samma grå.

  • Medlem
  • Uppsala
  • 2010-08-12 18:30
Ursprungligen av Pluffo:

... vad jag är ute efter är någonting som skulle göra om både den vita isbjörnen i en snöstorm och den svarta katten i en kolkällare till helt gråa bilder...

Ok, då förstår jag vad du är ute efter. Först ett varnings ord, bilder har naturligt ett visst nyansomfång och förmodligen förtar en sådan här behandlig mycket av ett fotos karaktär. Dock förstår jag att det finns applikationer för något liknande och det är hur som helst ett intressant problem.

-auto-gamma gör nästan det du vill göra. Den reducerar inte gamma med 50% utan den beräknar vilken nyans som är "mitten-färgen" (medelsvärtan) och gör sedan en relativ gamma-förändring så att medelsvärtan blir 50% grå.

Skulle det vara så att du inte vill ha medelsvärtan till 50%, så skulle du kunna först applicera en -auto-gamma för att få alla bilder till samma nivå och sedan applicera en gammajustering för att höja eller sänka svärtan.

Alternativt får du skriva ett eget skript. De tre komponenterna du behöver då är:

  1. Beräkna medelsvärtan och tonomfånget för bilden

  2. Beräkna hur stor procentuell gamma-förändring som behövs för att uppnå den önskade medelsvärtan

  3. Ändra gamma-värdet

Kolla även in den här sidan. Här finns många avancerade skript som använder sig av ImageMagick. Speciellt Freds -autogamma kan vara en utgångspunkt för vidare arbete.

Senast redigerat 2010-08-12 19:13
  • Medlem
  • Stockholm
  • 2010-08-12 20:37

Det förslaget som du anger om att köra -auto-gamma på allt för att sedan eventuellt köra en gamma-korrektion till låter utmärkt. Jag hade uppenbarligen missförstått vad -auto-gamma gör.

Hur som helst så verkar det inte som att ImageMagick vill spela boll här.

Jag kör kommandot: "mogrify -auto-gamma *.jpg" vilket gör att datorn tänker en stund och sedan skapar ett gäng nya bilder. Problemet är bara att de nya bilderna ser exakt likadana ut som de förra.

Från vad jag kan läsa mig till på ImageMagicks hemsida ( ImageMagick: Command-line Options ) så kan man modifiera detta kommando med hjälp av -channel {färg} men jag har prövat dels att specifiera denna manuellt till RGB (vilket väl borde fungera) och att inte använda mig av -channel-kommandot alls (då "RGB, sync" tydligen ska användas).

Anfäkta och anamma!

  • Medlem
  • Uppsala
  • 2010-08-12 22:17
Ursprungligen av Pluffo:

Jag kör kommandot: "mogrify -auto-gamma *.jpg" vilket gör att datorn tänker en stund och sedan skapar ett gäng nya bilder. Problemet är bara att de nya bilderna ser exakt likadana ut som de förra.

...

Anfäkta och anamma!

Det kan bero på vilken version av ImageMagick du har installerad. Du skriver ovan att du installerar med MacPorts, vilket också är det sätt som jag skaffade IM. När jag provar att konvertera en bild med -auto-gamma så säger programmet att den inte känner igen flaggan.

> convert -auto-gamma test.jpg new.jpg
convert: unrecognized option `-auto-gamma' @ convert.c/ConvertImageCommand/681.

Kör man convert -help, så går man också bet. -auto-gamma står inte med som ett val.

> convert -help | grep gamma
  -gamma value         level of gamma correction

Tyvärr verkar ImageMagick-porten vara version 6.5.5, medan den senaste stabila versionen på hemsidan är 6.6.3. Det kan vara värt att försöka med den versionen.

  • Medlem
  • Uppsala
  • 2010-08-12 22:21
Ursprungligen av dala:

Tyvärr verkar ImageMagick-porten vara version 6.5.5, medan den senaste stabila versionen på hemsidan är 6.6.3. Det kan vara värt att försöka med den versionen.

MacPort har version 6.5.5-0 av ImageMagick. -auto-gamma funktionen kom till i version 6.5.5-1 som släptes 13 dagar senare!

ImageMagick: Changelog

  • Medlem
  • Stockholm
  • 2010-08-12 22:55

Haha. Ånej, vilken miss Tack för klargörandet!

Ja, då blir det helt enkelt att försöka trycka in en senare version av programmet. Det här ska bli intressant.

  • Medlem
  • Stockholm
  • 2010-08-12 23:34

Åh min gud. Det här lär bli rätt roddigt.

Nu har jag installerat den senaste versionen, men verkar fortfarande få samma problem. Mitt oerhört primitiva sätt att kolla så att jag faktiskt kör den senaste versionen är att jag flyttar på min installationsmapp och ser hur terminalen klagar på att den inte hittar den.

Samtidigt hittar jag hur mycket information som helst angående det här på internet (känns det som i alla fall) så jag är väl lite naiv om jag tror att jag, genom att följa instruktionerna på ImageMagicks hemsida ( ImageMagick: Install from Binary Distribution ) faktiskt har lyckats installera det här på riktigt

  • Medlem
  • Uppsala
  • 2010-08-13 00:09
Ursprungligen av Pluffo:

Mitt oerhört primitiva sätt att kolla så att jag faktiskt kör den senaste versionen är att jag flyttar på min installationsmapp och ser hur terminalen klagar på att den inte hittar den.

Skriv:

> convert -help

så skrivs hjälptexten ut. Kolla på första raden som skrivs ut så ser du vilken version det är.

Kommandot

> which convert

visar sökvägen till binärfilen.

Med

> which -a convert

kan du se samtliga installerade versioner av programmet convert (som finns i $PATH).

  • Medlem
  • Stockholm
  • 2010-08-13 00:15

Jag har installerat den nya versionen genom att lägga ImageMagick-mappen i min hemma-mapp.

När jag skriver "which -a convert" så får jag upp:
/opt/local/bin/convert
/usr/local/bin/convert

När jag skriver "which convert" så får jag upp:
/opt/local/bin/convert

Är opt-mappen någonting som MacPorts har skapat eller någonting som skapades vid min installation?

När jag kör "convert -help" så anges det att jag kör 6.6.3-0-verisonen vilket känns lovande, men jag blir lite orolig över att "which convert" anger "/opt/local/bin/convert" som sökväg. Bör jag bli det?

  • Medlem
  • Uppsala
  • 2010-08-13 00:28
Ursprungligen av Pluffo:

Jag har installerat den nya versionen genom att lägga ImageMagick-mappen i min hemma-mapp.

När jag skriver "which -a convert" så får jag upp:
/opt/local/bin/convert
/usr/local/bin/convert

När jag skriver "which convert" så får jag upp:
/opt/local/bin/convert

Är opt-mappen någonting som MacPorts har skapat eller någonting som skapades vid min installation?

När jag kör "convert -help" så anges det att jag kör 6.6.3-0-verisonen vilket känns lovande, men jag blir lite orolig över att "which convert" anger "/opt/local/bin/convert" som sökväg. Bör jag bli det?

Ja, MacPorts installerar alla paket i /opt/local/.

Förmodligen beror din förvirring på att instruktionerna på ImageMagicks hemsida är något otydliga. Följande tre systemvariabler behöver sättas varje gång du öppnar en ny terminal:

export MAGICK_HOME="$HOME/ImageMagick-6.6.3"
export PATH="$MAGICK_HOME/bin:$PATH"
export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib:$DYLD_LIBRARY_PATH"

Prova att köra de tre kommandona och skriv sedan "which -a convert". Då bör första raden bli:

/Users/home/ditt_användarnamn/ImageMagick-6.6.3/bin/convert

För att automatiskt köra de tre kommandona varje gång du öppnar en ny terminal, lägg till dem i ett av inloggningsskripten (t.ex. ~/.bash_profile).

  • Medlem
  • Stockholm
  • 2010-08-13 00:36

Otydliga är de minst sagt.

Men okej, detta är egentligen inget problem då jag kan lägga in dessa tre kommandon i mitt script som jag ändå ska köra när jag tillämpar ImageMagick.

Jag plockade bort opt-mappen. När jag kör "which -a convert" efter att ha kört de kommandon du anger ovan så får jag upp:

/Users/Användarnamn/ImageMagick-6.6.3/bin/convert
/usr/local/bin/convert

vilket är bra.

Dock fortsätter problemet med att -auto-gamma inte gör ett smack, men nu börjar jag ju i alla fall att närma mig något (hoppas jag ).

  • Medlem
  • Uppsala
  • 2010-08-13 07:32
Ursprungligen av Pluffo:

Dock fortsätter problemet med att -auto-gamma inte gör ett smack, men nu börjar jag ju i alla fall att närma mig något (hoppas jag ).

Förmodligen är gamma-värdet redan väldigt bra på de bilder som du provar. Prova att konvertera en bild som är väldigt mörk eller väldigt ljus, så ska du se att bilden blir mer "dassig".

(Extremfallet är som sagt en helt svart eller helt vit bild. Använd Google Images.)

  • Medlem
  • Stockholm
  • 2010-08-13 11:22

Haha...Vafalls? Det här är ju helknasigt. Jag skapade två bildfiler i Pixelmator.

http://dl.dropbox.com/u/3394117/99/Black.jpg
http://dl.dropbox.com/u/3394117/99/White.jpg

Sedan körde jag dessa två kommandon:

convert Black.jpg -auto-gamma BlackAdjusted.jpg
convert White.jpg -auto-gamma WhiteAdjusted.jpg

Och detta var vad jag fick ut:

http://dl.dropbox.com/u/3394117/99/BlackAdjusted.jpg
http://dl.dropbox.com/u/3394117/99/WhiteAdjusted.jpg

BlackAdjusted.jpg blir som synes helt vit.
WhiteAdjusted.jpg fortsätter att vara helt vit.

  • Medlem
  • Uppsala
  • 2010-08-13 16:11
Ursprungligen av Pluffo:

Sedan körde jag dessa två kommandon:

convert Black.jpg -auto-gamma BlackAdjusted.jpg
convert White.jpg -auto-gamma WhiteAdjusted.jpg

Prova:

convert -auto-gamma Black.jpg BlackAdjusted.jpg
convert -auto-gamma White.jpg WhiteAdjusted.jpg
  • Medlem
  • Stockholm
  • 2010-08-13 16:16

convert -auto-gamma White.jpg WhiteAdjusted.jpg
convert -auto-gamma Black.jpg BlackAdjusted.jpg

Samma resultat dessvärre.

  • Medlem
  • Uppsala
  • 2010-08-13 16:49
Ursprungligen av Pluffo:

convert -auto-gamma White.jpg WhiteAdjusted.jpg
convert -auto-gamma Black.jpg BlackAdjusted.jpg

Samma resultat dessvärre.

Det blir likadant för mig också. Förmodligen blir IM förvirrad av att det bara finns en enda nyans i hela bilden. Prova med t.ex den här bilden som jag hittade med Google Images:

http://www.marver.gr/pict/granitis/zimbabwe%20black.JPG

(Det du ser är Jpeg-kompressionen.)

  • Medlem
  • Stockholm
  • 2010-08-13 17:03

Ah. Ja, där hände det faktiskt någonting (även om resultatet blev väldigt fult). Det börjar kännas som att hela proceduren fungerar nu. Vid närmare granskning av mina konverterade bilder så ser det faktiskt ut som att de har förändrats en smula, vilket antagligen innebär att de, som du sa, låg väldigt nära det nya gamma-värdet redan från början.

Tack för hjälpen! Verkligen!

  • Medlem
  • Uppsala
  • 2010-08-13 17:44
Ursprungligen av Pluffo:

(även om resultatet blev väldigt fult)

Jo, det som händer är att bilden nu använder hela tonomfånget och mittpunkten blir 50% grått. Det du ser, är att bilden "spricker" eftersom det bara finns ett par-tre nyanser i bilden.

Ursprungligen av Pluffo:

Tack för hjälpen! Verkligen!

Ingen orsak!

  • Medlem
  • Stockholm
  • 2012-10-03 19:32

Har laddat ner ImageMagick-x86_64-apple-darwin12.1.0.tar.gz från ImageMagick: Install from Binary Distribution och följt nämnda punkter. Men när jag kör nedanstående får jag problem.

convert logo: logo.gif
dyld: Library not loaded: /ImageMagick-6.7.9/lib/liblcms2.2.dylib
Referenced from: /Users/mrmac/ImageMagick-6.7.9/bin/convert
Reason: image not found
Trace/BPT trap: 5

Någon som har en lösning (använder 10.8.2)?

  • Medlem
  • Sollentuna
  • 2012-10-03 20:35

Du har missat DYLD_LIBRARY_PATH.

  • Medlem
  • Stockholm
  • 2012-10-03 20:45

Tyvärr inte så enkelt. Däremot finns inte någon liblcms2.2.dylib i aktuell katalog, om det nu ska göra det?

1
Bevaka tråden