Массовый экспорт всех изображений в виде отдельных файлов JPEG в InDesign?

Я новичок в Индизайне. У меня есть файл, содержащий изображения с обтравочными контурами Photoshop. Я хочу экспортировать все обрезанные изображения в папку. Я попытался сделать «Копировать ссылки на», и он успешно экспортировал исходные изображения. Однако мне нужны не исходные изображения, а обрезанные изображения. Есть ли способ экспортировать все обрезанные изображения в формате JPEG или TIFF, а не исходное связанное изображение? Короче говоря, я хочу экспортировать изображения без фона. Я надеюсь, что я имею смысл. У меня есть около 800-1000 изображений, поэтому метод пакетной обработки будет высоко оценен.

Я действительно нашел способ экспортировать изображения так, как я хочу. Мне просто нужно щелкнуть контейнер изображения (не изображение), перейти в «Файл»> «Экспорт», а затем экспортировать его в формате JPEG. Во всплывающем окне я выбираю выбор экспорта, максимальное качество и разрешение 2400. Он экспортирует изображения так, как я хочу. Но я должен сделать это один за другим. У меня только две проблемы:

  1. Есть ли способ сделать это партиями? Например, выбрать все контейнеры изображений и автоматически экспортировать их один за другим?

  2. Есть ли способ автоматически называть сохраненные файлы в соответствии с именем исходного изображения?

Спасибо за помощь!

Обновление: я нашел этот скрипт в одном из сообщений здесь и немного изменил его в соответствии со своими потребностями. Кажется, он работает в большинстве моих документов INDD, но не работает в других. Интересно, почему. Иногда я получаю сообщение об ошибке, что

Строка ошибки: null не является объектом

Источник: имя_файла = файл ( rect.graphics[0].itemLink.filePath ).name;

Я также заметил, что он пропускает некоторые объекты и не загружает все изображения. Я предполагаю, что он пропускает те, которые не находятся в прямоугольниках.

test();
function test()
{
var myDoc = app.activeDocument,
apis = myDoc.allPageItems, rect, fileName;

while ( rect = apis.pop() )
{
if ( !(rect instanceof Rectangle) || !rect.graphics[0].isValid ){ continue;}


fileName = File ( rect.graphics[0].itemLink.filePath ).name;
fileName = fileName.replace( /\.[a-z]{2,4}$/i, '.jpg' );


app.jpegExportPreferences.exportResolution = 2400;
app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.MAXIMUM;


//give it a unique name
var myFile = new File ("C:/Users/RANFacistol-Mata/Desktop/Image Trial/"+ fileName);


rect.exportFile(ExportFormat.JPG, myFile);
}
}

Есть ли способ изменить этот скрипт таким образом, чтобы вместо повторения всех прямоугольников я выполнял итерацию по всем объектам, очень похоже на нажатие этой кнопки «Далее»?

А затем проверьте, содержит ли этот объект изображение (jpg, tiff, psd, ai, eps). Если это так, то я экспортирую его, как написано выше.

Спасибо за помощь!

Ответы (3)

Спасибо за ваш вклад. Я объединил все ответы, которые я получил со всех разных форумов, на которые я обратился за помощью, и, наконец, придумал сценарий, который перебирает только связанные изображения и игнорирует, является ли контейнер прямоугольником, многоугольником или чем-то еще. Я также добавил счетчик, чтобы изображения не перезаписывались, если имена совпадают.

var myDoc = app.activeDocument,
apis = myDoc.links.everyItem().getElements(), items, fileName;
var i = 0;

while ( items = apis.pop() )
{
    items = items.parent.parent;  
    if ( !(items.hasOwnProperty ("graphics") )){ continue; }
    i++;
    try{
        fileName = File ( items.graphics[0].itemLink.filePath ).name;
        fileName =  i + "_" + fileName.replace( /\.[a-z]{2,4}$/i, '.jpg' );
    }catch(e){};

    app.jpegExportPreferences.exportResolution = 2400;
    app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.MAXIMUM;

    //give it a unique name
    var myFile = new File ("Mypath"+ fileName);

    items.exportFile(ExportFormat.JPG, myFile);
}

Да, чтобы проверить все элементы страницы на наличие изображений, а не только прямоугольники, нужно просто удалить !(rect instanceof Rectangle)часть. И пока вы это делаете, также переименуйте переменную из rect во что-то вроде pageItem, чтобы она описывала, что она на самом деле содержит. Итак, ваш скрипт должен выглядеть так:

var myDoc = app.activeDocument,
apis = myDoc.allPageItems, pageItem, fileName;

while ( pageItem = apis.pop() ) {
  if ( !pageItem.graphics[0].isValid ){ continue;}

  fileName = File ( pageItem.graphics[0].itemLink.filePath ).name;
  fileName = fileName.replace( /\.[a-z]{2,4}$/i, '.jpg' );

  app.jpegExportPreferences.exportResolution = 2400;
  app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.MAXIMUM;

  //give it a unique name
  var myFile = new File ("C:/Users/RANFacistol-Mata/Desktop/Image Trial/"+ fileName);


  pageItem.exportFile(ExportFormat.JPG, myFile);
}

Заменять

if ( !(rect instanceof Rectangle) || !rect.graphics[0].isValid ){ continue;}

к

if ( !(rect instanceof Rectangle) && !(rect instanceof Oval) && !(rect instanceof Polygon)|| !rect.graphics[0].isValid ){ continue;}

Обратите внимание, что если вы импортировали одно и то же изображение несколько раз, последнее вхождение этого изображения заменит все остальные.