Een grafische kalender met de hand maken is geen gemakkelijke taak. Dat is waarom het het beste is als je een manier kunt vinden om het proces te automatiseren. In de tutorial van vandaag laten we je zien hoe je een JavaScript-kalender genereert die een heel jaar aangepast is. Als je een beetje een computerprogrammeur bent, dat is geweldig, zo niet, maak je geen zorgen, dit zal vrij eenvoudig zijn.
Volgens Adobe is een script een reeks opdrachten waarmee Photoshop een of meer taken kan uitvoeren. Het eerste dat u hoeft te doen, is de JavaScript-referentie van Adobe bekijken. Je kunt het hier vinden. Dit bevat alle objecteigenschappen en -methoden die Photoshop CS4 ondersteunt, met voorbeelden, en het geeft u een idee over wat voor soort dingen u kunt doen met scripting in Photoshop. Als u een oudere versie gebruikt, kunt u hier referenties vinden.
Dus laten we beginnen. Het belangrijkste idee voor het project is om voor elke maand tekstlagen te maken met de datums, dus we zullen voornamelijk met tekstmanipulatie werken. Open ExtendScript Toolkit en maak een nieuw JavaScript-bestand aan (Command + N). Dit bevat alle opdrachten die we Photoshop gaan geven. Als u ExtendScript Toolkit niet wilt gebruiken, kunt u elke eenvoudige teksteditor gebruiken.
Eerst moeten we enkele variabelen definiëren voor de documentattributen en het kalenderkleurenschema. Ik heb mijn document 1280x800 gemaakt met een resolutie van 72 pixels / inch, het "PhotoshopScriptCalendar" genoemd en 2010 als het jaar van de kalender gekozen die we zullen maken.
Dit is het basiskleurenschema dat we gaan gebruiken. "NormalColor" is voor weekdagen en maandnamen. Voor zondagen heb ik een andere kleur gebruikt om ze op te laten vallen, dit is "highlightColor", en we gebruiken "backColor" als de standaard achtergrondkleur van de agenda als we geen aangepaste afbeelding voor die kleur selecteren.
Zoals ik eerder zei, gaan we voornamelijk werken met tekstmanipulatie, dus we moeten enkele variabelen definiëren voor de inspringing en tekst die we herhaaldelijk gaan gebruiken, zoals de headers van de maand.
Om een andere kleur in de kolom Zondagen in te stellen, moeten we er een andere tekstlaag van maken dan de andere dagen. Dit is waarom we twee headers hebben: "monthHeader" - van maandag tot zaterdag en "Sunday Header". Elk van deze twee variabelen eindigt met twee "\ r". Deze staan voor nieuwe lijntekens, net als wanneer u op de Return-toets op uw toetsenbord drukt. Vervolgens definiëren we de indentatievariabele. Merk op dat 1 januari een vrijdag is, dus voor elke dag ervoor moeten we een streepje in plaats van nummers plaatsen. Het aantal witruimten van deze variabelen is afhankelijk van het lettertype dat u gebruikt en de grootte van het, dus het zal een beetje van "trail and error" nodig hebben voordat u het goed doet. Maak tenslotte een lijst van alle maandnamen.
Nu we alles hebben wat we nodig hebben, kunnen we beginnen met het maken van het .psd-document.
Zoals u kunt zien, is de code redelijk leesbaar. Aan onze Photoshop-toepassing voegen we een nieuw document toe met de opgegeven breedte, hoogte, resolutie en naam die we eerder hebben gedefinieerd, een kleurmodus en de referentie behouden in een nieuwe variabele "doc". Standaard zijn alle nieuwe documenten in RGB, dus we hadden die parameter kunnen weglaten, maar als u bijvoorbeeld CMYK wilt, kunt u "NewDocumentMode.CMYK" gebruiken. Hetzelfde met LAB, GRAYSCALE en BITMAP. Je vindt ze allemaal in de referenties die hierboven zijn gelinkt.
Vervolgens maken we een nieuwe selectie en selecteren we het volledige document, vullen het met onze achtergrondkleur en deselecteren het uiteindelijk.
Vervolgens moeten we een aangepaste achtergrond van een bestaande afbeelding toevoegen. De verloopachtergrond van het uiteindelijke resultaat dat hierboven is gepost, is eigenlijk een afzonderlijke afbeelding.
Hiervoor gaan we de functie openDialog () gebruiken. Dit opent het dialoogvenster van "Bestand> Openen" en plaatst de matrix "bestand" in de lijst met geselecteerde afbeeldingen. We gaan alleen de eerste geselecteerde afbeelding gebruiken die zich in de array "file" bevindt op positie 0. We moeten dus eerst controleren of een afbeelding is geselecteerd.
Vervolgens gaan we de geselecteerde afbeelding in onze applicatie laden en krijgen we een verwijzing ernaar door "app.activeDocument" aan te roepen, waarmee het actieve document in Photoshop wordt geretourneerd.
Pas het formaat van de afbeelding aan aan de gewenste breedte en hoogte. Nogmaals, we maken een nieuwe selectie van het hele document, kopiëren deze selectie en sluiten het document met de optie om de wijzigingen niet op te slaan.
Plak tenslotte in ons agendadocument de selectie. Dit plaatst de afbeelding als de eerste laag boven de achtergrondlaag. Noem het dan zoiets als "BackgroundImage".
Merk op dat als geen afbeelding uit het dialoogvenster was geselecteerd, geen van deze commando's zou zijn uitgevoerd.
OK. Nu komt de eigenlijke generatie van de kalender. Dit kan een beetje moeilijker zijn, maar we zullen het stap voor stap doen en hopelijk zal het niet zo moeilijk te begrijpen zijn.
We moeten een reeks acties doen voor elke maand van het jaar. Hiervoor gebruiken we een "voor" -lus. Kortom, dit neemt de variabele "curr", die we gebruiken om de huidige maand aan te geven waarmee we werken, stelt de initiële waarde in op 0, en doet vervolgens de set van acties herhaaldelijk, waarbij de waarde van "curr" elke keer wordt verhoogd, tot dit wordt 12. Dus gaat door alle twaalf maanden.
Eerst moeten we twee variabelen definiëren die we gaan gebruiken om onze maanden als een raster in het document te plaatsen. Deze vertegenwoordigen de X- en Y-offsets van elke maand. We gaan 4 maanden op één rij zetten, dus voor de X-offset gaan we de "%" -bewerking gebruiken. Dit geeft de rest van de deling van "curr" terug naar 4. Deze offset zal hetzelfde zijn voor januari, mei, september, voor februari, juni, oktober, enzovoort, voor elke maand in dezelfde kolom. Voor de Y-offset gebruiken we de javascript-functie "Math.floor ()" die de grootste waarde retourneert, kleiner dan het delingresultaat van "curr" naar 4. Dus voor de maanden uit dezelfde rij is de Y-offset hetzelfde.
Uiteindelijk willen we de lagen voor elke maand in een aparte groep hebben. Dus we beginnen met het maken van een laaggroep en geven deze de naam van de huidige maand. We gebruiken hier de lijst met maanden die we eerder hebben gedefinieerd.
Vervolgens maken we een nieuwe tekstlaag in onze groep en stellen we de naam in voor de huidige maand. Dit wordt onze laag met de naam van de maand.
Nu moeten we de tekstkenmerken instellen zoals tekstkleur, lettergrootte en uitvulling. We gaan het type van onze tekst instellen op "PARAGRAPHTEXT" en geven onze laag de gewenste afmetingen. Het kenmerk "inhoud" van de variabele "monthName" staat voor de daadwerkelijke tekst die zichtbaar is in de laag, dus we willen dat dit de naam is van de huidige maand.
Eindelijk gaan we de laag 90 ° tegen de klok in draaien en onze laag positioneren. Hier gaan we onze offsetvariabelen "x" en "y" gebruiken.
Houd er rekening mee dat de positionering ten opzichte van de linkerbovenhoek van de lagen wordt uitgevoerd, maar sinds we het 90 ° CCW hebben geroteerd, is het nu de hoek linksonder geworden. Als uw document andere dimensies heeft dan het mijne, moet u mogelijk de constanten wijzigen die ik heb gebruikt voor positionering. De waarden die ik heb gebruikt, staan hieronder vermeld.
Vervolgens gaan we de tekstlaag maken die alle datums in de huidige maand bevat, behalve de zondagen. We gaan het toevoegen aan de groep die we eerder hebben gemaakt en de naam, de motivering, de kleur en grootte van het lettertype instellen en positioneren. We zullen de inhoud hiervan een beetje later toevoegen, ik zal uitleggen waarom, wanneer we zover komen.
Hetzelfde voor de laag van zondag, maar deze keer gaan we de kleur instellen op "highlightColor".
Nu moeten we twee variabelen maken die onze tekst bevatten terwijl we deze genereren, "tekst" bevat de weekdagen en "textSun" de zondagen. We beginnen met het toevoegen van de headers en het invoegen van de inspringing voor de eerste van de maand. We maken een nieuwe datum met de javascript "Date ()" -functie van het jaar van onze kalender, de huidige maand en de eerste van die maand, en krijgen zijn positie in de week. Onthoud dat de nummering altijd begint bij 0, dus bijvoorbeeld als de eerste van de maand een maandag is, "n" 0 is, als het een dinsdag is, "n" 1 is, enzovoort. Vervolgens moeten we de inspringing die we aan het begin hebben gedefinieerd, zo vaak als nodig is toevoegen aan onze "tekst" -variabele. Als de eerste van de maand bijvoorbeeld een woensdag is, voegen we de inspringing twee keer toe.
OK. Het is tijd om alle getallen voor de maand te genereren. Hiervoor moeten we weten hoeveel dagen er zijn in onze huidige maand en we hebben de nummers nodig in de indeling "voorloopnullen", dus we moeten teruggaan en twee aangepaste functies definiëren: "daysInMonth" en "makeDay". Blader dus naar de bovenkant van uw code en voeg deze functies toe. Zoals ik al zei, retourneert de functie "daysInMonth" het aantal dagen in de maand die we het geven, en geeft "makeDay" het nummer dat we het geven op in een specifiek formaat en voegt het wat spaties toe, nodig voor het uitsplitsen van de dagen van de maand. Dus als we bijvoorbeeld de functie "daysInMonth" met het jaar = 2010 en de maand = 0 (januari) noemen, wordt het getal 31 geretourneerd. Als we de functie "makeDay" bijvoorbeeld met d = 3 noemen, zal deze terugkeren de tekst "03", maar als d = 13 zal het "13" retourneren. Merk op dat als "d" kleiner is dan 10, het een nul zal toevoegen voor het.
We beginnen met d = 1 en verhogen het totdat het het aantal dagen in de maand heeft bereikt. Nu, als "i" de waarde "6" heeft, betekent dit dat het een zondag is, dus we moeten het toevoegen aan de zondaglaag. Vergeet niet om een "\ r" hier te plaatsen voor een nieuwe regel. Anders voegen we het toe aan de weekdagen. Hier voegen we alleen een nieuwe regel toe als de huidige dag "zaterdag" is ("i" is "5"). Aan het einde moeten we zowel "i" als "d" verhogen, en als de waarde van "i" "7" bereikt, dat wil zeggen dat als de laatste dag toegevoegd een zondag was, we het opnieuw "0" moeten maken.
Ten slotte hebben we alle datums in onze tekstvariabelen en kunnen we deze aan onze lagen toevoegen. De reden dat we deze stap hebben uitgesteld, is dat het even duurt voordat Photoshop tekst aan een laag toevoegt, dus het is beter om alles in één keer toe te voegen in plaats van elke dag afzonderlijk toe te voegen.
Dus alle maandlagen worden nu gegenereerd en het enige wat we moeten doen is de laag van het jaar maken en die kleine lijn onderaan. Voor de laag van het jaar is het dezelfde procedure die we eerder hebben gebruikt, maak een nieuwe laag, geef het een naam, tekstgrootte en kleur, en plaats het waar we willen.
Voor de bottom line is het een beetje anders. Eerst moeten we een gebied definiëren met X- en Y-coördinaten voor alle vier de hoeken, dan een selectie maken uit die regio, deze vullen met onze kleur op een nieuwe laag en uiteindelijk deselecteren.
Al onze code is klaar! Het enige dat u nu hoeft te doen, is het uitvoeren. Als u ExtendScript Toolkit gebruikt, selecteert u in het vervolgkeuzemenu "Adobe Photoshop". Als u Photoshop niet hebt geopend, klikt u op het kleine pictogram aan de linkerkant "Verbinden met doeltoepassing" en drukt u vervolgens op het pictogram Afspelen. Als u een andere teksteditor heeft gebruikt, slaat u het bestand op met de extensie ".js" of ".jsx" en voert u het uit vanuit Photoshop: Bestand> Scripts> Bladeren en selecteert u vervolgens uw bestand.
We zijn klaar! Ik hoop dat je het leuk vond om aan dit kleine project te werken. Scripts in Photoshop zijn erg handig wanneer u repetitieve handelingen moet uitvoeren en uw werk een stuk eenvoudiger kunt maken als u ze eenmaal onder de knie hebt. Aarzel niet om suggesties te sturen, ze zijn altijd welkom!