[ID CC-CC2021] Скрипт выгрузки изображений с полосы с конвертацией в tiff (MacOS)

ukcuk

Участник
Топикстартер
Сообщения
8
Реакции
0
Задача: портировать, либо приблизить к имеющемуся несложный функционал скрипта.
Вводная: выгрузить в неизменный каталог jpg, psd, tiff, png итп, все, что можно конвертнуть в tiff (без изменения цветности, размеров, профилей), pdf, psd,eps - как есть оставить. Все файлы будут иметь вид "номер издания-номер полосы-номер фото".tiff (151-1-2.tiff)
Имеется сам скрипт, работающий на ура под WinOS. В связи с переходом к MacOS ищем варианты исполнить.
Кто возьмется, исходник предоставлю... Оплата оговаривается отдельно.
TristaDPI, ImageProcessor, Crop&Resize пробовали... Не то
 

apg_777

15 лет на форуме
Сообщения
278
Реакции
81
Если исходник на JavaScript, то он должен и так работать. Затем на фолдер с картинками напустить Image Processor фотошопа, скрипт штатно присутствует в комплекте.

Не по теме:
Но на MacOS есть смысл использовать AppleScript чтобы не разделять процессы сборки и конвертации — озадачить сразу индизайн и фотошоп. Тогда точно новый скрипт писать надо.
 

ukcuk

Участник
Топикстартер
Сообщения
8
Реакции
0
Код:
/***
    * Сергей Исаев, г. Тюмень, 2012 год
    * Версия 0.86 ( PC only )
    * © АНО «Тюменская область сегодня»
    *
    * Скрипт сохраняет оригинальные картинки в папку site/color_images,
    * сохраняет все картинки в формате TIFF в папку ФОТО В ПОЛОСУ,
    * пересвязывает картинки на созданные TIFF
    *
    * Файлы записываются в папку 192.168.11.240/oneday/site/img/ из WindowsXP
    * Файлы записываются в папку /Volumes/oneday/site/img/ из MacOS
    * ресурсы должны существовать!
    
Журнал изменений:
 - Существующие файлы не перезаписываются, а увеличивается индекс фото
 - Если номер не указан, то Номер и Полоса запрашиваются повторно
 - Сохраняется под Специальным расширением 'tif3', чтобы скриптом менять обратно.
 - При запросе номера по нажатию клавиши «Esc» завершает обработку скрипта
 - Не изменяется цветовое пространство файла
 
 Требования:
 - Windows
 - ImageMagic
    */

/*
    Поиск всех невнедренных изображений
    Перебор всех найденных изображений
    Если изобржаение не в папке ФОТО в ПОЛОСУ или не в формате TIFF, то Обработать.
    
*/

function myCreateProgressPanel(srcMaxValue, srcMaxWidth) {
    myProgressPanel = new Window("window", "Экспорт файлов на сервер в формате TIF");
    with (myProgressPanel) {
        myProgressPanel.myProgressBar = add("progressbar", [12, 12, srcMaxWidth, 24], 0, srcMaxValue);
    }
    return myProgressPanel;
}


// Настройка экспорта JPG.
// Возможно не нужны, если копировать оригиналы
app.jpegExportPreferences.exportResolution = 200;
app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.HIGH;

var stringLog = '';
// Платформозависимый путь к папке назначения для Mac и PC
// Если Macintosh, то Mac
if (0 == $.os.indexOf("Macintosh")) {
//    var CONST_SITE_FOLDER = "/Volumes/oneday/site/color_images/";
    var CONST_SITE_FOLDER = "~/Desktop/color_images/";
    var CONST_TIF_FOLDER = "~/Desktop/ФОТО В ПОЛОСУ/";
    var CONST_SLASH = "/";
} else {
// иначе PC
    var CONST_SITE_FOLDER = "\\\\192.168.11.3\\oneday\\site\\color_images\\";
    var CONST_TIF_FOLDER = "\\\\192.168.11.4\\paper\\ФОТО В ПОЛОСУ\\";
    var CONST_SLASH = "\\";
}
// Не копировать фотки из Фото в полосу и Оригиналов изображений
var reProcessed = new RegExp("(ФОТО В ПОЛОСУ)");
var reTIFF = new RegExp("(\.tiff|\.psd)");

// Получает Активную страницу
var activePage = app.activeWindow.activePage;
// Получает Активный документ
var myDocument = app.activeDocument

/*
  *    Начинает обраотку полосы
  */

// Запрашивает номер и полосу
var issueAndPage = prompt(  'Пожалуйста, введите номер и полосу' ,
                                        '000-00' ,
                                        'Запрос номера и полосы');
while (parseInt(issueAndPage) < 1) {
    issueAndPage = prompt(  'Пожалуйста, введите НОМЕР и ПОЛОСУ' ,
                                        '000-00' ,
                                        'Запрос номера и полосы');
}
// Если нажат Escape, то завершить скрипт
if (!issueAndPage) exit();
                                        
// Извлекает номер выпуска
issueNumber = parseInt(issueAndPage);
issueFolder = '';
if (issueNumber < 10) {
    issueFolder = '00' + issueNumber + '/';
} else if (issueNumber < 100) {
    issueFolder = '0' + issueNumber + '/';
} else {
    issueFolder = '' + issueNumber + '/';
}

// Надо запоминать номер фотки, чтобы фотки не повторялись!!!!
var maxProgressBarValue = activePage.allGraphics.length*20;
var myProgressPanel = myCreateProgressPanel(maxProgressBarValue, 400);
myProgressPanel.show();

for (var iCounter = 0; iCounter < activePage.allGraphics.length; iCounter++) {
    var someGraphics = activePage.allGraphics[iCounter];
    var someLink = someGraphics.itemLink;
    var sourceImageFilename = someLink.filePath;
    
    var filenameArray = someLink.name.split ('.');
    var fileExt = filenameArray[filenameArray.length-1].toLowerCase();

    // Изменяет значение прогресс бара
    myProgressPanel.myProgressBar.value = iCounter*20;

    var colorFile = new File(someLink.filePath);
    if (reProcessed.test(someLink.filePath) && reTIFF.test(someLink.filePath)) {
        stringLog += "\n" + someLink.name + ' уже сохранен.';
    } else if (someLink.status == LinkStatus.LINK_EMBEDDED) {
        stringLog += "\n" + someLink.name + ' внедрен.';
    } else if (!colorFile.exists) {
            stringLog += "\n" + someLink.name + ' файл НЕ НАЙДЕН.';
    } else {
        //Получает номер картинки
        var imgFolder = new Folder(CONST_TIF_FOLDER+issueFolder);
        if (imgFolder.exists) {
            imgFiles = imgFolder.getFiles(issueAndPage+'*');
            imgNumber = imgFiles.length + 1;
        } else {
            imgFolder.create();
            imgNumber = 1;
        }
        
        // Создает папку для исходника
        var colorFolder = new Folder(CONST_SITE_FOLDER+issueFolder);
        if (!colorFolder.exists) {
            colorFolder.create();
        }       
        
        // Проверяется тип файла
         if ( (fileExt == 'tif') || (fileExt == 'tiff') || (fileExt == 'psd') || (fileExt == 'pdf') || (fileExt == 'eps')) {
             // Просто скопировать
             destFileExt = '.' + fileExt;
             doConvert = false;
         } else {
             // Скопировать и преобразовать в TIF
             destFileExt = '.tif';
             doConvert = true;
         }

         // Экспортирует файл в папку ФОТО В ПОЛОСУ
        paperFile = new File(CONST_TIF_FOLDER+issueFolder+issueAndPage+'-'+imgNumber+destFileExt);
        while (paperFile.exists) {
            imgNumber++;
            paperFile = new File(CONST_TIF_FOLDER+issueFolder+issueAndPage+'-'+imgNumber+destFileExt);
        }
        colorFile.copy(paperFile);
         myProgressPanel.myProgressBar.value = iCounter *20 + 1;

        // Сохраняет исходник
        var colorFile = new File(someLink.filePath);
        if (colorFile.exists) {
            colorFile.copy(CONST_SITE_FOLDER+issueFolder+issueAndPage+'-'+imgNumber+'.'+fileExt);
        }
         myProgressPanel.myProgressBar.value = iCounter *20 + 2;

        // Пересвязывает картинку экспортированным файлом
        someLink.relink(paperFile);

         // Если надо конвертировать, то конвертировать
         if (doConvert) {
             // Создать скрипт конвертации
             scriptFile = new File('C:\\Users\\Public\\'+issueAndPage+'-'+imgNumber+'.cmd');
             scriptFile.encoding = 'UTF-8';
             scriptFile.open('w');
             scriptFile.writeln("echo OFF");
             scriptFile.writeln("chcp 65001");
//             scriptFile.writeln('set srcfile='+colorFile.fsName);
//             scriptFile.writeln('set dstfile='+paperFile.fsName);
             scriptFile.writeln('convert "'+colorFile.fsName+'" -compress None "'+paperFile.fsName+'"');
             scriptFile.writeln('forfiles /P C:\\Users\\Public\\ /S /M *.cmd /D -2 /C "cmd /c /del /q @path"');
//             scriptFile.writeln('echo OPERATION IS DONE %dstfile%');
//             scriptFile.writeln('pause');
             scriptFile.close();

             // Запустить скрипт
             scriptFile.execute();
         }

/*
        // Создание файла со специальным расширением
        paperFile = new File(CONST_TIF_FOLDER+issueFolder+issueAndPage+'-'+imgNumber+'.tiftmp');
        colorFile.copy(paperFile);
*/

        
        // Перегоняет файл в TIF
//        paperFile.execute();
        // В зависимости от someLink.linkType можно задать разные перекодировки изображений
        
        // Цикл с задержкой для преобразования JPG в TIF. (Фото 5МБ примерно на 15 секунд)
        var secondsToSleep = Math.floor(colorFile.length/500/17);
        for (var i = 3; i < 20; i++) {
            $.sleep(secondsToSleep);
            myProgressPanel.myProgressBar.value = iCounter *20 + i;
        }
                
        stringLog += "\n" + someLink.name + ' сохранен.';
    }
 
}   
myProgressPanel.myProgressBar.value = maxProgressBarValue;

alert('Экспорт фотографий на сервер в формате TIFF завершен.'+"\n"+stringLog);
//alert(stringLog);
 

ukcuk

Участник
Топикстартер
Сообщения
8
Реакции
0
к сожалению под рукой нет apple устройств, чтобы проверить...
 

apg_777

15 лет на форуме
Сообщения
278
Реакции
81
MacOS 10.12.6, ID CS6 и CC2018, в индизайне только штатные модули. Скрипт работает.
Оставил в psd bitmap, в tif не захотел переводить. Прогрессбар шевелится, ссылки перелинковываются.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
MacOS 10.12.6, ID CS6 и CC2018, в индизайне только штатные модули. Скрипт работает.
Оставил в psd bitmap, в tif не захотел переводить. Прогрессбар шевелится, ссылки перелинковываются.
Щито? Скрипт из #4 работает на макос? '%)'
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
Вот этот кусок
Код:
         if (doConvert) {
             // Создать скрипт конвертации
             scriptFile = new File('C:\\Users\\Public\\'+issueAndPage+'-'+imgNumber+'.cmd');
             scriptFile.encoding = 'UTF-8';
             scriptFile.open('w');
             scriptFile.writeln("echo OFF");
             scriptFile.writeln("chcp 65001");
//             scriptFile.writeln('set srcfile='+colorFile.fsName);
//             scriptFile.writeln('set dstfile='+paperFile.fsName);
             scriptFile.writeln('convert "'+colorFile.fsName+'" -compress None "'+paperFile.fsName+'"');
             scriptFile.writeln('forfiles /P C:\\Users\\Public\\ /S /M *.cmd /D -2 /C "cmd /c /del /q @path"');
//             scriptFile.writeln('echo OPERATION IS DONE %dstfile%');
//             scriptFile.writeln('pause');
             scriptFile.close();

нужно переписать и
будет конвертить в макосе
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
Кстати, можно всю эту колбасню и не колбасить не создавать файла со скриптом, а заменить одной строчкой.
 

ACTPOHOM

12 лет на форуме
Сообщения
2 981
Реакции
1 133
существует очень грамонтый функционал под мак, который умеет все это, в том числе писать пакетно как постраничные ПДФы, джепеги, тифы и прочее, отправлять все это по почте или выкладывать на ФТП.
от компании zevrix
мы покупали всем верстальщикам.
по опыту, я с первой покупки попросил скидку, сославшись на большой курс евро :) мне дали 50%

Automate InDesign printing and exporting | Output Factory
 
Последнее редактирование:

ukcuk

Участник
Топикстартер
Сообщения
8
Реакции
0
Кстати, можно всю эту колбасню и не колбасить не создавать файла со скриптом, а заменить одной строчкой.
к сожалению, опыта маловато, чтобы изящно это сделать...
@ACTPOHOM, попробую, но однокнопочный вариант, как сейчас - вполне работает на ПиСи, хотелось бы не нагружаться дополнительными лицензиями
@apg_777, да, запустил сейчас на Мак + СС 2018, создался на рабочем столе каталог, точнее два.
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
Работает. Для полного соответствия теме даже поставил CC2018. В один из фолдеров пишет исходники, в другой tifы.
Я, может быть, отстал от прогресса, шагающего широкими шагами, но! В какой версии Mac OS выполняются команды терминала Windows?
 
  • Спасибо
Реакции: Flame

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Вызывают шквал оваций чудеса цивиллизации!
 

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
Работает. Для полного соответствия теме даже поставил CC2018. В один из фолдеров пишет исходники, в другой tifы.
это потому что у вас
Код:
if ( (fileExt == 'tif') || (fileExt == 'tiff') || (fileExt == 'psd') || (fileExt == 'pdf') || (fileExt == 'eps')) {
             // Просто скопировать
             destFileExt = '.' + fileExt;
             doConvert = false;
а вот если png или прочая хрень, то скрипт рухнет
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
не создавать файла со скриптом, а заменить одной строчкой.
Код:
app.doScript('do shell script ("convert ' + colorFile.absoluteURI + '  -compress None '+ paperFile.absoluteURI +' ")', ScriptLanguage.APPLESCRIPT_LANGUAGE);
Примерно так.
Но разбираться в лапша-коде фактически невозможно. Проще переписать заново вообще
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Не придирайся, на яваскрипте такой код невозможен в принципе. А этот даже комментирован. Причем, местами избыточно. '))'