Gäst: Scripta med Photoshop, Linus Sjöberg

8

Linus Sjöberg gick distanskursen Digital Bildbehandling våren 2008 och det var där intresset för digital bildbehandling väcktes. Till vardags arbetar Linus på Kungliga Bibliotekets avdelning för audiovisuella medier.

I de flesta fall använder jag Photoshop för ren bildbehandling; jag tar ett foto, öppnar i Photoshop, gör mina redigeringar, sparar som JPEG och skickar till labb för framkallning. Somliga bearbetningar gör jag ofta och för dessa har jag skapat actions. Det finns dock fall när actions inte räcker till, till exempel när man ska automatisera skapandet av inbjudningskort.

I det här (fingerade) exemplet ska jag bjuda in ett antal gäster på nyårsmiddag och för detta ändamål har jag skapat en mall.

Mallen kan se ut hur som helst sålänge textlagret ”namelayer” finns med. Gästernas namn skriver jag ner i en textfil.

Eftersom jag ska skicka bilderna på framkallning vill jag ha en JPG-fil per inbjudan, men för säkerhets skull vill jag även skapa en master-fil i form av en PSD där varje inbjudan ligger som ett eget lager. Hur åstadkommer jag då detta? I det här specifika fallet valde jag att skapa ett enkelt javascript-program som utgår från mallen och skapar bildfilerna automatiskt.

Scriptet för detta laddar du ner här.

Huvudlogiken ligger i funktionen mainLoop(), det är här alla förberedelser görs (historyState sparas, masterfilen öppnas, datafilen läses in etc), själva processningen sker i en while-loop (jag återkommer strax till denna) och slutligen görs lite efterbehandling innan scriptet avslutas.

Det centrala i mainLoop() är just while-loopen eftersom det är där själva bearbetningen äger rum. För varje rad i datafilen uppdateras mallfilens ”namelayer”, lagren plattas ihop, masterfilen uppdateras, en JPG-version skapas och slutligen återställs mallen till sitt ursprungsläge. Denna process upprepas sedan för varje rad i datafilen.

Det finns tre andra funktioner som var och en har en specifik uppgift, nämligen createJpgFile() som skapar en JPG-version av ett dokuement, addLayerToResPsd() som lägger till ett ytterligare lager i masterfilen samt savePsd() som stänger och sparar masterfilen. Det skulle fungera lika bra att ha den här funktionaliteten direkt i mainLoop() men läsbarheten ökar generellt om man delar upp sina script i delfunktioner.

För att använda scriptet öppnar man sin mall (se bara till att lagret ”namelayer” existerar) och går sedan till File>Scripts>Browse. Där väljer man JSX-filen och trycker på ”Load”. Efter några sekunder (eller minuter…) är scriptet klart och man kan studera resultatet.

Om man har grundläggande erfarenhet av programmering och JavaScript så öppnar Scriptfunktionerna en helt ny värld, möjligheterna är bokstavligen obegränsade.

För den som är intresserad av att komma igång är Photoshop Scripting Guide och Photoshop JavaScript Reference Guide ovärderliga.

Som utgångspunkt för fortsatt laborerande finns scriptet [generate.jsx], en kraftigt förminskad mall [template-s.jpg] samt en exempelfil med data [data.txt] för nerladdning.

8 kommentarer till Gäst: Scripta med Photoshop, Linus Sjöberg

  1. Fredrik skriver:

    Jag har också lekt en del med automatisering i Photoshop. Det är kraftfullt och skoj, om man redan kan programmera.

    Räcker inte Javascript till så får man ta till t.ex. .net under windows. När jag jobbade på högskolan automatiserade jag hela vår personalkatalogsproduktion. Vår administratör behövde bara trycka på en knapp, vänta en stund och sen göra lite finjusteringar.

    Det är härligt när datorer gör jobbet, så man har tid över till annat.

  2. Fredrik Schoug skriver:

    Ojsan! Här var det inte lätt att hänga med i svängarna! Kanske något för Linus att göra en konkret instruktionsvideo om för publicering på Moderskeppet?

  3. Jannica skriver:

    Tack Linus för ditt intressanta inlägg. Tyvärr hör jag till den lite äldre generationen så det var inte så lätt att hänga med i alla datatermer, men är övertygad om att alla ni yngre som är uppvuxna med datorer och programering kommer ha mycket glädje av dina tips. Själv får jag göra ett inbjudningskort i taget….snyft…

  4. Tomas Gillberg skriver:

    Ett intressant inlägg.
    Detta med automatiserade funktioner i PS är inte helt fel. Tyvärr är jag själv dålig på kodning men det finns som tur vänliga människor som delar med sig av sina script.
    Mycket lärorikt.

  5. Henrik Hedlund skriver:

    Mycket intressant artikel! :)
    Jag tänkte dock flika in att det går att åstadkomma det som beskrivs i artikeln med redan inbyggda funktioner i PS, nämligen Variables och Data Sets (plus lite hjälp av Image Processor på slutet).

    1. Skapa ett Photoshop dokument precis som i artikeln och se till att ha ett namngivet textlager (namelayer i detta fall).

    2. Skapa också en datatextfil som i artikeln, men se till att ha en rubrik högst upp i dokumentet, i detta fall kan ”namn” vara en lämplig rubrik. Anledningen till detta är att Variables kan använda flera olika variabler genom att skapa kolumner i textfilen (med tabbar). I detta fall skulle det i alla fall då kunna se ut så här:

    namn
    Linus och Sara
    Kan och Kerstin
    osv

    3. Med filen öppen i Photoshop går du till Image -> Variables -> Define. I dialogen väljer du först lagret namelayer i drop-down boxen, och klickar sedan i ”Text Replacement” samt skriver rubriknamnet som du skrev in i datafilen (dvs. namn). Detta säger åt Photoshop att texten på lagret namelayer skall bytas ut med datat som finns i kolumnen namn i den datafil som vi sedan kopplar ihop med dokumentet. I denna dialog kan man alltså mappa upp flera varibler/kolumner och på så sätt byta ut massor med text utan extra arbete. Klicka OK.

    4. Gå till Image -> Variables -> Data Sets, klicka ”Import” och sedan ”Select File” och leta reda på textfilen. Klicka sedan OK.

    5. Nu är vi återigen i Variables dialogen och kan där förhandsgranska datat som vi laddat genom att klicka i ”Preview” och sedan stega igenom datat med pilknapparna i ”Data Sets” boxen högst upp. Är du nöjd klickar du OK. Det fina nu är att datat nu sparas tillsammans med PSD-filen, så vi behöver inte spara textfilen om vi inte vill.

    6. Genom att välja Image -> Apply Data Set kan du nu byta ut texten genom att manuellt växla mellan de olika namnen, vilket inte är så spännande när man har många namn. För att spara ut varje namn som en egen fil väljer vi istället File -> Export -> Data Sets as Files. Välj en mapp och skapa en namngivningsmönster för dina filer och tryck sedan OK. Voila, nu har du individuella filer baserat på dina inställningar..

    7. Nackdelen med detta sätt är att exporten genererar PSD-filer, inte JPG, men för att lösa det kan vi använda ett inbyggt script i Photoshop; Image Processor. Gå till File -> Scripts -> Image Processor och väljs sedan den mapp där du exporterade dina filer i steg 6. Du kan sedan välja att spara på samma ställe, eller välja en ny mapp. Du kan även lägga på en Action eller spara i flera olika filformat. När du gjort dina inställningar klickar du bara OK och Photoshop löser resten.

    Vet inte om det var så mycket enklare än att använda scriptet i artikeln, men det går att göra ofantligt mycket mer Varibles, t.ex. multipla datafält, visa/gömma lager, länka in externa bilder, etc.

  6. Linus S skriver:

    Henrik: När jag gjorde det här exemplet så hade jag på känn att det här är något som måste gå att göra med existerande funktioner, det där med variabler verkar hur spännande som helst, jag ska genast utforska det vidare. Script (eller .net mfl) är lite bazooka på myggor för sådana här saker, riktigt häftigt blir det när man ska göra flera olika saker eller mer avancerade trick (I den fullfjädrade varianten av det här scriptet ändras t.ex. fontstorleken på texten utifrån namnlängd o.dyl., detta skalade jag dock bort för läsbarhetens skull).

    Just nu sitter jag och skapar en bordsplaceringskarta i InDesign och funderar på om man inte kan göra någon fiffig scriptlösning även för att automatisera detta :)

  7. Henrik Hedlund skriver:

    Linus: Jo, jag ser helt klart nyttan med att scripta mer komplexa fall, med scriptspråkets tillgång till logiska operatorer, flödeskontroll, iterationer, etc.

    Jag har dock faktiskt aldrig satt mig in i scriptning av PS (eller någon av de övriga app’arna i sviten för den delen), för jag helt enkelt aldrig haft någon direkt idé att implementera.. :)

    Alla nyheter och möjligheter som införts i CS4 har dock gjort mig sugen att lära mig mer om det.. Det finns på min TODO lista med alldeles för mycket annat.. ;)

    Ett par nyttiga länkar om alla expansionsmöjligheter som finns nu för tiden:

    http://blogs.adobe.com/jnack/suite_development/
    http://www.adobe.com/devnet/photoshop/

  8. daniel skriver:

    mkt spännande ;D detta måste man ta och lära sig mer om :)

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

*

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>