Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
-
30. září 2024
-
4. října 2024
-
14. listopadu 2024
-
11. prosince 2024
Software
Skriptujeme InDesign (21): Obrázky podruhé
Adobe InDesign sazba
7. srpna 2006, 00.00 | V tomto díle se budeme věnovat způsobům přístupu k obrázkům ve skriptech a dále práci s
vazbami obrázků. Zejména v druhém případě jsme pro vás připravili řadu zajímavých ukázek
kódu, které vám, věříme, usnadní práci s daným typem obsahu.
V tomto díle se budeme věnovat způsobům přístupu k obrázkům ve skriptech a dále práci s vazbami obrázků. Zejména v druhém případě jsme pro vás připravili řadu zajímavých ukázek kódu, které vám, věříme, usnadní práci s daným typem obsahu.
Jak se na obrázky odkazovat?
K obsahu obrázků se lze s pomocí skriptů dostat různými způsoby. Univerzální přístup zde
poskytuje kolekce allGraphics
(pro document
, page
, spread
, layer
, pageItem
- tedy různé
typy rámečků). Výraz:
app.activeDocument.allGraphics
takto vrací pole veškeré grafiky v dokumentu,
app.activeDocument.pages[0].allGraphics
všechnu grafiku na dané stránce atd. Do seznamu je zahrnuta i uvolněná (overriden)
grafika ze vzorové stránky a to pro každý svůj výskyt, stejně tak zde nalezneme i
vloženou (inline) grafiku. Položky kolekce allGraphics
jsou typu Image
(bitmapová
grafika vložená - Photoshop, TIFF, JPEG, PICT aj., a dále i inline), PDF
a EPS
.
Další univerzální možnost představuje kolekce links
, obsahující seznam všech odkazů
(vazeb) na soubory vložené do dokumentu. V této kolekci nicméně najdeme i linkované
textové soubory a nemusíme najít některou vloženou grafiku, na to je třeba při případném
hromadném zpracování občas třeba dávat pozor. K některému zpracování se tedy více hodí
allGraphics
, k jinému zase links
, často přijdou vhod oba přístupy.
Obrázek je spojen se svým rámečkem, tedy objektem typu rectangle, oval či polygon. Na danou skutečnost je třeba myslet zejména pokud chceme pracovat s obrázky adresovanými pomocí výběru. Pokud totiž zadáme příkaz jako je třeba
var myImage=app.selection[0];
vloží se do proměnné myImage
odkaz buďto na rámeček obrázku (v případě že je daný
rámeček vybrán pomocí nástroje Výběr-Selection) nebo obrázek vložený do daného rámečku
(pokud je obrázek vybrán nástrojem Přímý výběr-Direct Selection). Pokud chceme i v
prvním případě získat odkaz na obrázek (obrázky) v daném rámečku, můžeme použít
následující adresování
var myImage=app.selection[0].allGraphics[0];
Daným způsobem lze mimochodem získat korektní odkazy i na obrázky vložené do políček
tabulky v určitém textovém rámečku. K bližší identifikaci typu vložené grafiky slouží
vlastnost imageTypeName
- ta může nabývat hodnot TIFF
, JPEG
, Photoshop
, EPS
, Adobe
Portable Document Format (PDF)
apod. Pomůže nám aplikovat operace pouze na určitý typ
grafiky - viz výklad v příští části. Otestovat typ grafiky ve výběru lze třeba s pomocí
následujícího kódu (samozřejmě by mohl být použit i jednodušší kód v případě, že víme,
že je určitě vybrán obrázek):
//Zjistí typ právě vybrané grafiky
//Kontroluje, aby byl nástrojem výběr či přímý výběr vybrán jediný
obrázek
function myAlert(){alert("Vyberte obrázek (jako jediný objekt) a
spusťte tento skript znovu");exit();}
var mySel=app.selection[0];
if((mySel==undefined)||(app.selection.length>1)){myAlert()};
if((mySel.constructor.name=="Rectangle")||(mySel.constructor.name=="Oval")||(mySel.constructor.name=="Polygon"))
{if(mySel.allGraphics.length==1){var
myImage=mySel.allGraphics[0]}else{myAlert()}}
else{if(((mySel.constructor.name=="Image")||(mySel.constructor.name=="EPS")||(mySel.constructor.name=="PDF")))
{var myImage=mySel}
else{myAlert()}
}
if(myImage.imageTypeName){alert("Obrázek je typu
"+myImage.imageTypeName)}else{alert("Vložená grafika?")};
Zajímat nás samozřejmě mohou vlastnosti jako je název či plné souborové jméno obrázku, je-li tento odkazován. K tomu i dalším účelům slouží kolekce links pro práci s vazbami (dále též odkazy). O té si nyní povíme něco více.
Vazby obrázků
Kolekce links
obsahuje všechny odkazy na externí soubory spojené s dokumentem. Ještě
jednou přitom připomeňme, že mimo importované grafiky lze zde najít i textové soubory či
dokumentů tabulkových procesorů, došlo-li k vložení daného typu obsahu se zapnutou
odpovídající předvolbou InDesignu. Všechny odkazy v dokumentu adresujeme například
takto:
app.activeDocument.links
K identifikaci typu odkazovaného obrázku slouží metoda linkType
. Ověření, zda dokument
obsahuje linkované Photoshop, PDF a JPEG soubory lze provést třeba takto:
var myLi=app.activeDocument.links;
var myPhC=0;
var myPDFC=0;
var myJPEGC=0;
for (i=0;i<myLi.length;i++)
{if(myLi[i].linkType=="Photoshop"){myPhC=myPhC+1;}
if(myLi[i].linkType=="Adobe Portable
Document Format (PDF)"){myPDFC=myPDFC+1;}
if(myLi[i].linkType=="JPEG"){myJPEGC=myJPEGC+1;}}
alert("Dokument obsahuje\n"+myPhC+" odkazovaných Photoshop
souborů\n"+myPDFC+" odkazovaných PDF souborů\n"+myJPEGC+" odkazovaných
JPEG souborů\n"+"Celkem je v dokumentu "+myLi.length+" odkazů na
soubory");
Mimochodem, k rychlé informaci o všech typech odkazů použitých v dokumentu stačí jednořádkový příkaz:
alert(app.activeDocument.links.everyItem().linkType);
Link
lze použít v kombinaci s allGraphics
a to třeba následujícím způsobem:
//Vrací informaci o typu první odkazované grafiky vložené
na stránku
app.activeDocument.pages[0].allGraphics[0].itemLink.linkType
Přes link lze také zjistit jméno (základní i úplné) souboru obrázku:
//Předpokládáme, že je vybrán obrázek, nikoli jeho rámeček
var myImg=app.selection[0];
if(myImg.itemLink!=null){alert(myImg.itemLink.name+"\n"+myImg.itemLink.filePath)}else{alert("Vložená
grafika?")};
Objekt link je díky nabízeným vlastnostem a metodám hodně silným prostředkem při řešení
různých úkonů s odkazovanou grafikou, ke které se jinak využívá odpovídající paleta
InDesignu. Zcela zásadní je v jeho případě vlastnost status
, dovolující zjistit
nastavení jednotlivých odkazů, ke změnám pak lze použít příslušných metod (viz
referenční příručka s. 871-873). Obdobným způsobem lze používat v prostředí InDesignu
paletku Links, skriptování nicméně přináší větší flexibilitu. Řešit lze v daném případě
například problémy s vloženou grafikou, kterou chceme zpětně linkovat (metoda unembed
),
grafikou, která je neaktuální (metoda update
) či grafikou, u které jsou chybné odkazy
(oprava metodou relink
). Při takovémto i jiném zpracování odkazů přijde často vhod
metoda show
, která dovoluje zobrazit obrázek, jehož se týká nalezený problém. Přehled
ilustračních příkladů lze začít následujícími jednoduchými diagnostikami a opravami:
//Zobrazí první grafiku v dokumentu která chybí a zobrazí
její stávající náhled
var myDoc=app.activeDocument;
var myLi=myDoc.links;
for(i=0;i<myLi.length;i++){
if(myLi[i].status==LinkStatus.linkMissing){myLi[i].show()}
}
//Vyhledá vloženou grafiku a dovolí ji případně znovu linkovat
var myDoc=app.activeDocument;
var myLi=myDoc.links;
for(i=myLi.length-1;i>=0;i--){
if(myLi[i].status==LinkStatus.linkEmbedded){myLi[i].show();
if(confirm("Unembed?")){myLi[i].unembed()}}
}
Ve výše uvedeném příkladu si povšimněte zpracování pozpátku
for(i=myLi.length-1;i>=0;i--)
To je v daném (a mnoha obdobných případech) potřeba, neboť oprava odkazu může jako jiné podobné manipulace měnit stav dané kolekce během zpracování.
Opravu všech neaktuálních odkazů v dokumentu je možno zajistit třeba takto:
var myDoc=app.activeDocument;
var myLi=myDoc.links;
for(i=myLi.length-1;i>=0;i--){if(myLi[i].status==LinkStatus.linkOutOfDate){myLi[i].update()}}
Dále je možné použít například interaktivní procházení a opravování vadných odkazů.
//Zobrazí vždy chybějící grafiku v dokumentu, zobrazí její
náhled
//a dovolí opravu výběrem souboru
var myDoc=app.activeDocument
var myLi=myDoc.links;
//Zde si nastavte vlastní cestu podle potřeb
var myFile=File("/c/clanky/skriptid/obrazky/pod/");
for(i=myLi.length-1;i>=0;i--){
if(myLi[i].status==LinkStatus.linkMissing)
{myLi[i].show();
try{myLi[i].relink(myFile.openDlg("Zvolte soubor",": *.*"));}
catch(e){if(confirm("Skončit hned?")){exit()}}}
}
Poslední uvedený příklad pak samozřejmě ještě pořád asi není to pravé pro ty, kdo chtějí naráz například opravit odkazy pro několik tisíc vložených grafik. Hodně jednoduchá varianta skriptu, který něco takového dokáže vypadá asi takto:
//Skript který změní všechny chybějící odkazy určením nové
složky
var myDoc=app.activeDocument
var myLi=myDoc.links;
//Zde si nastavte vlastní cestu (ve které jsou obrázky) podle potřeb
var newPath="/c/clanky/skriptid/obrazky/pod/";
//Případně by šlo použít něco jako je toto
//var newPath=Folder.selectDialog().toString()+"/";
for(i=myLi.length-1;i>=0;i--){
if(myLi[i].status==LinkStatus.linkMissing){myLi[i].relink(File(newPath+myLi[i].name));myLi[i].update();}
}
Kouzlení s řetězci vyjadřujícími jména souborů pomocí odpovídajících funkcí JavaScriptu
(v předchozím příkladu jsme použili hodně triviální "výrobu" nového souborového názvu
výrazem newPath+myLi[i].name
) dovoluje provádět i mnohem sofistikovanější záměny. Dave
Saunders například na svém blogu zveřejnil
skript, který umožňuje přelinkovat
skupinu barevných obrázků (u kterých je název ukončen řetězcem _cp
) skupinou obrázků v
odstínech šedi (stejné názvy jako u předchozí skupiny, ale ukončené řetězcem _bw
).
(Nemusí zde jít jen o barevný mód obrázku, v podstatě se jen jedná o skript dovolující
vyměnit jednu skupinu odkazů druhými.)
//DESCRIPTION: Replace color linked images with BW
alternates
/*
Color images have "_cp" in their names; BW have
"_bw"
*/
myDoc = app.activeDocument;
myLinks = myDoc.links;
for (j = myLinks.length - 1; j >= 0; j--) {
myName = myLinks[j].filePath;
myNewName = myName.split("_cp").join("_bw");
if (myName != myNewName) {
// Original link includes "-cp" in name
myNewImageFile = File(myNewName);
if (!myNewImageFile.exists) {
alert ("Can't find file: " +
myNewName);
continue;
}
myLinks[j].relink(myNewImageFile);
myLinks[j].update();
}
}
Závěrem
Náš výklad o obrázcích tímto nekončí. V příštím díle si povíme ještě něco více o dalších možnostech zpracování a správy daného typu obsahu.
Obsah seriálu (více o seriálu):
- Skriptujeme InDesign (1): Úvod
- Skriptujeme InDesign (2): První kroky
- Skriptujeme InDesign (3): Základy JavaScriptu poprvé
- Skriptujeme InDesign (4): Základy JavaScriptu podruhé
- Skriptujeme InDesign (5): Dokumenty poprvé
- Skriptujeme InDesign (6): Dokumenty podruhé
- Skriptujeme InDesign (7): Výstup
- Skriptujeme InDesign (8): Stránky
- Skriptujeme InDesign (9): Stránkové objekty poprvé
- Skriptujeme InDesign (10): Stránkové objekty podruhé
- Skriptujeme InDesign (11): Dialogy
- Skriptujeme InDesign (12): Text poprvé
- Skriptujeme InDesign (13): Text podruhé
- Skriptujeme InDesign (14): Text potřetí
- Skriptujeme InDesign (15): Hledání a záměny poprvé
- Skriptujeme InDesign (16): Hledání a záměny podruhé
- Skriptujeme InDesign (17): Regulární výrazy
- Skriptujeme InDesign (18): Tabulky poprvé
- Skriptujeme InDesign (19): Tabulky podruhé
- Skriptujeme InDesign (20): Obrázky poprvé
- Skriptujeme InDesign (21): Obrázky podruhé
- Skriptujeme InDesign (22): Obrázky potřetí
- Skriptujeme InDesign (23): ESTK aneb jak na editaci a ladění skriptů
- Skriptujeme InDesign (24): Vrstvy
- Skriptujeme InDesign (25): Barvy poprvé
- Skriptujeme InDesign (26): Barvy podruhé
- Skriptujeme InDesign (27): Barvy potřetí
- Skriptujeme InDesign (29): Metadata podruhé
- Skriptujeme InDesign (30): Návěští
- Skriptujeme InDesign (31): Okna
- Skriptujeme InDesign (32): Reakce na události
- Skriptujeme InDesign (33): Novinky v CS3 verzi
Tématické zařazení:
» Rubriky » Polygrafie
-
14. května 2014
Jak vkládat snímky do galerií a soutěží? Stručný obrazový průvodce
-
23. dubna 2014
Konica Minolta přenesla výhody velkých zařízení do kompaktních modelů
-
12. června 2012
-
9. dubna 2014
-
29. listopadu 2013
-
6. září 2004
OKI snižuje ceny barevných laserových tiskáren C3100 a C5200n
-
13. května 2004
-
19. ledna 2004
QuarkXPress Passport 6: předvedení nové verze na konferenci Apple Forum 27.1.2004
-
6. února 2001
-
30. listopadu 2014
Nový fotoaparát α7 II: první plnoformát s pětiosou optickou stabilizací obrazu na světě
-
14. října 2024
-
22. října 2024
-
14. listopadu 2024
-
10. prosince 2024