Sida 1 av 2
Förbättra mitt fotoskript? Behöver hjälp...igen :) [LÖST]
Postat: 01 jun 2009, 17:00
av TobbeT
Hej,
Konservburken hjälpte mig med detta skript som jag använder i stort sett dagligen. Nu skulle jag vilja "lägga" till lite mer operationer i skriptet
Kod: Markera allt
#!/bin/bash
find -iregex '.*\.jpe?g' -type f -execdir mkdir -p 1280x960 \; -execdir mogrify -path 1280x960 -scale 1280x960\> {} \;
Det ser ut enlig ovan idag. Det jag skulle vilja att det gör efter detta är att skapa en zip-fil med samma namn som storleken på fotot (1280x960), sen ta bort bilderna i aktuell katalog så att enbart zip-filen finns kvar. Varför jag vill göra så är att i WordPress kan man ladda upp zip-filer innehållande foton om man har NextGen Gallery installerat. Mycket smidigt tycker jag.
Tacksam för lite hjälp...åter igen
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 03 jun 2009, 20:51
av David Andersson
Jag har kikat i
http://ubuntu-se.org/phpBB3/viewtopic.p ... 02#p243122 och
http://ubuntu-se.org/phpBB3/viewtopic.php?f=35&t=36410 för att försöka förstå hur scriptet är tänkt att användas. Om jag fattat rätt (och antar att scriptet heter "min_skalare") så gör du normalt så att du går med
cd i en terminal till en mapp med nya foton och skriver kommandot
min_skalare. Det förutsätter att scriptet är sparat i mappen ~/bin. Alternativt att du har sparat scriptet i mappen ~/.gnome2/nautilus-scripts och i filutforskaren
högerklickar i mappen med nya bilder och väljer
Scripts > min_skalare. I dessa fall, om du inte gör cd, eller gör cd till en mapp högre upp, eller starter nautilus-scriptet i en mapp högre upp, så kommer scriptet att behandla alla bilder, gamla som nya. (Tipset om -maxdepth 0 eller /<siffror>x<siffror>/ är inte implementerad i scriptet du citerar.)
Får jag föreslå att scriptet ändras så att det inte söker efter alla bilder i alla undermappar utan att det måste startas i mappen med bilder (normalt mappen med nya bilder), alternativt ges argument med mappar eller filer som ska behandlas.
Är det ok?
I så fall blir huvudstrukturen för scriptet
Kod: Markera allt
mkdir $TEMPDIR
mogrify -path $TEMPDIR -scale 1280x960\> $ARG/*.jpg
zip -rm $ARG.zip $TEMPDIR
Förutom detta ska scriptet uttökas med avancerad lokig för att sätta ARG och TEMPDIR (och en initial #!). Men det tar vi om du tycker att förutsättningarna är ok.
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 03 jun 2009, 23:05
av TobbeT
Men det tar vi om du tycker att förutsättningarna är ok.
Absolut ok. Huvudsaken är att scriptet (som idag ligger i gnome2/nautilus -script och heter så enkelt som 1280x960. Sen har jag flera beroende på vilken storlek jag vill ha på bilden. Ibland vill jag kanske ha alla bilder i formatet 200x153 då ska den scriptet fixa det och sen skapa en zip-fil som sedan deletar alla bilder förutom originalen då förstås.
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 04 jun 2009, 00:19
av David Andersson
TobbeT skrev:Men det tar vi om du tycker att förutsättningarna är ok.
Absolut ok. Huvudsaken är att scriptet (som idag ligger i gnome2/nautilus -script och heter så enkelt som 1280x960. Sen har jag flera beroende på vilken storlek jag vill ha på bilden.
När man skapar en zip-fil, ska alla bilder i filen ha samma skalning, eller ska det gå att blanda t.ex 1280x960 och 200x153 i samma zip? (Antar att alla ska vara samma för att snabbt komma vidare.)
Jag skulle föreslå att scriptet som skapas heter "min_skalare" och att det sparas i mappen ~/bin . Det ska utformas att klara alla skalningar så vi slipper dubblering av kod. I ~/.gnome2/nautilus-scripts gör du symboliska länkar med namnen "1280x960", "200x153", osv, som alla pekar på ~/bin/min_skalare .
Huvudstruktur
Kod: Markera allt
mkdir $TEMPDIR
mogrify -path $TEMPDIR -scale $SCALE\> $ARG/*.jpg
zip -rm $ARG.zip $TEMPDIR
Nu behövs ytterligare en avancerad grej i början som sätter SCALE efter namnet som startade scriptet.
En tillfällig lösning för i kväll till vi gjort ett mer robust och flexibelt script
Kod: Markera allt
#!/bin/bash
#
# Scale down jpg-images i current dir and save them in a zip file in same dir.
# Zip file is named after the scale applied, e.g. "1280x960.zip"
# Save this script in ~/bin
# Create symlinks in ~/.gnome2/nautilus-scripts named "1280x960" etc
SCALE=$(basename "$0")
TEMPDIR=$SCALE
mkdir "$TEMPDIR"
mogrify -path "$TEMPDIR" -scale "$SCALE"\> *.jpg
zip -rm "$SCALE".zip "$TEMPDIR"
Byt *.jpg till *.JPG om det behövs.
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 04 jun 2009, 09:25
av TobbeT
Det ser bra ut. Gjorde en liten test och zip-filen skapas men den innehåller en katalog vilket det inte ska göra, bara dom ner skalade bilderna ska vara packade i zip-filen.
Det här kommer att bli kanon när det blir klart. Tack så här långt för hjälpen.
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 04 jun 2009, 19:03
av David Andersson
TobbeT skrev:men den innehåller en katalog vilket det inte ska göra
man zip säger
-j Store just the name of a saved file (junk the path), and do not
store directory names. By default, zip will store the full path
(relative to the current path).
Ändra -rm till
-rmj och lägg till ett nytt kommando
rmdir "$TEMPDIR" på slutet (eftersom zip inte längre tar bort den tomma mappen).
Låt dej inte luras av att det fungerar. Det måste vara robust och flexibelt och framförallt vackert, och där är vi inte riktigt än.
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 04 jun 2009, 20:02
av TobbeT
Ändra -rm till -rmj och lägg till ett nytt kommando rmdir "$TEMPDIR" på slutet (eftersom zip inte längre tar bort den tomma mappen).
Fixat
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 18 jun 2009, 17:40
av TobbeT
Ok...
Vart tog du vägen David. Scriptet är väl inte klart att användas som det är nu, eller hur? Jag vill inte vara för gå-påig men det har inte hänt nåt sedan den 4:e juni, idag 2 veckor. Vill du inte fortsätta att hjälpa mig med scriptet så får du säga till. Det är inget jag "måste" ha men det skulle underlätta rätt mycket.
Tacksam för svar
//Tobbr
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 19 jun 2009, 20:21
av David Andersson
TobbeT skrev:
Vart tog du vägen David. Scriptet är väl inte klart att användas som det är nu, eller hur?
Jo, det ska fungera. Har du provat och vad är det som i så fall inte funkar?
Min kommentar om att det behöver utvecklas handlar om
1) möjligt att ange antingen mapp eller fil som parametrar (och båda) (*)
2) inte hårdkoda stor eller liten bokstav i "JPG", och känna igen fler bildtyper
3) möjligt att använda både som kommando och nautilus-script (**)
4) eventuellt grafisk felhantering
5) göra det riktigt vackert
(*) Nu använder den alla JPG i aktuell mapp. Man kanske vill kunna markera en delmängd av bilderna och skala och packa ihop bara dem.
(**) 3 tyckte jag var smart då, men tycker det numera är minst viktigt.
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 21 jun 2009, 19:22
av TobbeT
Hej,
Njae, det funkar väl inte riktigt. Jag förstår inte hur det kan skapas bilder med storleken 1280x960 med scriptet när det inte är angivet nånstans i filen. Om jag vill ha bilderna i en annan storlek, hur gör jag då, då det inte finns angivet i "min_skalare" filen? Sen blir katalogen 1280x960 kvar, tom. Den ska raderas efter att zip-filen är skapad.
Kod: Markera allt
#!/bin/bash
#
# Scale down jpg-images i current dir and save them in a zip file in same dir.
# Zip file is named after the scale applied, e.g. "1280x960.zip"
# Save this script in ~/bin
# Create symlinks in ~/.gnome2/nautilus-scripts named "1280x960" etc
SCALE=$(basename "$0")
TEMPDIR=$SCALE
mkdir "$TEMPDIR"
mogrify -path "$TEMPDIR" -scale "$SCALE"\> *.jpg
zip -rmj "$SCALE".zip rmdir "$TEMPDIR"
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 22 jun 2009, 07:57
av TobbeT
Näe,
Det vill sig inte. Nu har jag testat ett tag med olika format men en gång av tre så funkar det (förutom att katalogen blir kvar efter att zip filen är skapad). Jag testade i en katalog där jag hade 12 bilder. Jag valde att skala ner dom till 1350x1013...mappen skapades men ingen zipfil. Testade igen i en annan mapp, där skapades katalogen men inga nerskalade bilder alls. Det blir lite hip-som-hap, ibland funkar det, och ibland inte.
Jag kom underfund med att bilden blir den storlek jag döper min_skalare fil till.
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 25 jun 2009, 19:40
av David Andersson
zip -rmj "$SCALE".zip rmdir "$TEMPDIR"
Kommandot rmdir "$TEMPDIR" ska vara på en egen rad. (Spara som ~/bin/min_skalare och gör exekverbar):
Kod: Markera allt
#!/bin/bash
#
# Scale down jpg-images i current dir and save them in a zip file in same dir.
# Zip file is named after the scale applied, e.g. "1280x960.zip"
# Save this script in ~/bin
# Create symlinks in ~/.gnome2/nautilus-scripts named "1280x960" etc
SCALE=$(basename "$0")
TEMPDIR=$SCALE
mkdir "$TEMPDIR"
mogrify -path "$TEMPDIR" -scale "$SCALE"\> *.jpg
zip -rmj "$SCALE".zip "$TEMPDIR"
rmdir "$TEMPDIR"
Jag kom underfund med att bilden blir den storlek jag döper min_skalare fil till.
Ja, men man kan göra som i kommenteren i scriptet: symboliska länkar med namnen BREDDxHÖJD så kan man ha flera nautilus-script för olika storlekar. Och så behöver man bara buggfixa scripten på ett ställe. (

)
Exempel: skapa symlänkar till min_skalare i terminalen
Kod: Markera allt
ln -s ~/bin/min_skalare ~/.gnome2/nautilus-scripts/1400x1050
ln -s ~/bin/min_skalare ~/.gnome2/nautilus-scripts/1280x960
ln -s ~/bin/min_skalare ~/.gnome2/nautilus-scripts/1024x768
ln -s ~/bin/min_skalare ~/.gnome2/nautilus-scripts/800x600
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 25 jun 2009, 20:30
av TobbeT
Hmmm,
Nu händer det ingenting. Jag sparade all kod som du hade skrivit i filen min_skalare, gjorde den körbar i bin katalogen, skapade länkar till gnome2/nautilus scripts, skapade ett antal filer med namnen 150x113, 200x153, osv, alltså en kopia av min_skalare. Har testat alla i olika kataloger med olika antal bilder men nu skapas det ingenting när jag exekverar scriptet, varken nerskalade bilder eller zip-filen, inte ens katalogen för aktuell storlek skapas.
Kod: Markera allt
#!/bin/bash
#
# Scale down jpg-images i current dir and save them in a zip file in same dir.
# Zip file is named after the scale applied, e.g. "1280x960.zip"
# Save this script in ~/bin
# Create symlinks in ~/.gnome2/nautilus-scripts named "1280x960" etc
SCALE=$(basename "$0")
TEMPDIR=$SCALE
mkdir "$TEMPDIR"
mogrify -path "$TEMPDIR" -scale "$SCALE"\> *.jpg
zip -rmj "$SCALE".zip "$TEMPDIR"
rmdir "$TEMPDIR"
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 25 jun 2009, 22:17
av David Andersson
TobbeT skrev:Hmmm,
Nu händer det ingenting.
Startar du skripten med t.ex högerklick > skript > 200x153 ? Kan du prova att starta dem i en terminal och se vad det blir för felmeddelande. Gå till en mapp med bilder med
cd. Exempel
Starta ett av skripten. Exempel
Om det går bra ska den säga rader som börjar med "adding: [filnamn]" ett antal gånger. Säger den nåt annat också?
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 26 jun 2009, 07:56
av TobbeT
Kod: Markera allt
tobbe@xbmc:/media/DATA/Bilder/Tobbe/2009/02/07-02$ ~/.gnome2/nautilus-scripts/200x153
mogrify: unable to open image `*.jpg': No such file or directory @ magick/blob.c/OpenBlob/2418.
zip error: Nothing to do! (try: zip -rmj 200x153.zip . -i 200x153)
PS: Jag högerklickar också i aktuell katalog och väljer storleken jag är ute efter. Händer ingenting.
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 26 jun 2009, 13:43
av Xappe
TobbeT skrev:Kod: Markera allt
tobbe@xbmc:/media/DATA/Bilder/Tobbe/2009/02/07-02$ ~/.gnome2/nautilus-scripts/200x153
mogrify: unable to open image `*.jpg': No such file or directory @ magick/blob.c/OpenBlob/2418.
zip error: Nothing to do! (try: zip -rmj 200x153.zip . -i 200x153)
PS: Jag högerklickar också i aktuell katalog och väljer storleken jag är ute efter. Händer ingenting.
//Tobbe
Hmm, heter bilderna *.jpg eller *.JPG?
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 26 jun 2009, 20:18
av TobbeT
Alltid .jpg, aldrig .JPG
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 26 jun 2009, 20:45
av David Andersson
TobbeT skrev:Alltid .jpg, aldrig .JPG
"
mogrify: unable to open image `*.jpg': No such file or directory" tyder på att det inte finns några filer som matchar *.jpg i aktuell mapp. Om du skriver
eller
i samma mapp där du skrev ~/.gnome2/nautilus-scripts/200x153, vad visar den då?
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 26 jun 2009, 23:03
av TobbeT
Sorry,
Fel av mig

blind som f-n. Det ska självklart vara JPG inte jpg. Ber om ursäkt. Jag ändrade i min_skalare nder bin katalogen och nu funkar det. Om jag vill ha det med småbokstäver istället, hur gör jag då? Alltså .jpg när skalningen är klar och zip-filen skapad.
//Tobbe
Re: Förbättra mitt fotoskript? Behöver lite hjälp...igen :)
Postat: 27 jun 2009, 21:11
av David Andersson
TobbeT skrev:Om jag vill ha det med småbokstäver istället, hur gör jag då? Alltså .jpg när skalningen är klar och zip-filen skapad.
Det är en eller två av två olika frågor.
1) Att scriptet ska klara både .jpg och .JPG (och kanske .JpG, .jPg, .jpeg, etc).
2) Att scriptet ska döpa de nedskalade bilderna till små (.jpg) oavsett om originalet hade .jpg eller .JPG (och kanske .jPg, .jpeg, etc).
1a) 1) kan man lösa med att ha både *.jpg och *.JPG som argument till mogrify. Men då kommer man nästan alltid att få ett felmeddelande från kommandot (att den inte hittar "*.JPG" om det bara fanns .jpg), men den kommer för övrigt att göra det den ska. (Man kan lägga till *.jpeg och *.JPEG och även *.gif, *.GIF, *.png och *.PNG för att klara fler bildtyper. Allt kan sammanfattas i ett argument med klamrar *.{jpg,JPG,jpeg,JPEG,gif,GIF,png,PNG}, men fortfarande får man det onödiga felmeddelandet för filer som inte finns.)
1b) alternativt en lösning med file-kommandot som klassificerar filtyp utan att titta på filnamnändelsen. Med kommandot
file -F ':-)' --mime-type * | awk -F ':-)' '/ image\//{print $1}' listas alla filnamn som är bilder, oavsett om de har en ändelse och vad för ändelse. Sen gäller det att bjuda mogrify den listan på ett sätt som klarar mellanslag i filnamn.
2a) 2) borde kunna lösas med t.ex kommandot prename på lämpligt ställe i scriptet.
Allt ovanstående försämrar scriptet på det sättet att det blir
fulare. Som scriptet är nu har det i huvudsak fyra rader med fyra kommandon, mkdir, mogrify, zip och rmdir. Kommandona kommer i en naturlig ordning och gör det de ska på ett ganska begripligt sätt. Utmaningen är att genomföra förbättringarna utan att förstöra denna skönhet.
Men först, vad är viktigast just nu: 1) eller 2)?