Adobe Indesign CS5: как получить доступ к имени изображения, типу файла и другим свойствам?

У меня средний уровень владения Javascript, но я не очень хорошо знаком с Adobe «Extendscript». Для практики и лучшего понимания структуры кода InDesign я пытаюсь получить доступ к свойствам изображения через rectangles.images.

Можно ли получить доступ, скажем, к имени файла изображения через rectangles.images? Также мне интересно, можно ли таким образом получить доступ к цветовым атрибутам изображения, скажем, чтобы преобразовать его в оттенки серого?

Вот мой подход:

for(var i = 0; i < app.activeDocument.rectangles.length; i++)
{
    var imageType = app.activeDocument.rectangles[i].images.constructor.name;

    switch(imageType)
    {
        case "Images":
            alert(app.activeDocument.rectangles[i].images.name); // "name" is not a valid property here!
            break;

        default:
            alert("There are no images in this file.");
    }
}

Кроме того, можно ли определить тип файла изображения с помощью .rectangles.images.constructor.name? Я хотел бы добавить дополнительный случай, скажем, для PDF или JPEG.


person Ian Campbell    schedule 15.06.2012    source источник


Ответы (1)


Вы не должны использовать конструктор, если вы не хотите попытаться определить, какой это тип объекта JS, что вам не нужно делать в этом случае, потому что коллекция images будет содержать только изображения. Свойство файла фактически будет находиться в связанном с изображением объекте Link.

Обратите внимание, что ничего из этого не тестировалось, я просто использовал свои знания JS и документацию по API. и переработал ваш код...

var rect = app.activeDocument.rectangles,
    imgs,
    filePath,
    hasImages = false;

for(var i = 0; i < rect.length; i++) {
    imgs = rect[i].images;
    if( imgs.length > 0) {

      hasImages = true;
      for (var j = 0; j < imgs.length; j++) {
         filePath = imgs[j].itemLink ? imgs[j].itemLink.filePath : null; 
         switch (imgs[j].imageTypeName) {
             case 'jpeg':
                alert('This is a JPEG:' + filePath);
                break;
             case 'pdf':
                alert('This is a PDF: '+filePath);
                break;
             default:
               alert('Default case - '+imgs[j].imageTypeName+': '+filePath);
         }
      }
   }
} 

if(!hasImages) {
   alert('No images in document');
}
person prodigitalson    schedule 15.06.2012
comment
Спасибо @prodigitalson! Я не знал о свойствах itemLink и filePath, пока вы не ответили на этот вопрос. - person Ian Campbell; 29.06.2012
comment
Я получил файл из другого источника, и он дает мне путь к файлу этой системы, но когда я экспортирую его в html, он дает мне изображение в отдельной папке, значит, изображение также закодировано/прикреплено к файлу - person Muhammad Ali; 13.10.2016