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

  • Автор темы Автор темы ukcuk
  • Дата начала Дата начала

ukcuk

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

Не по теме:
Но на MacOS есть смысл использовать AppleScript чтобы не разделять процессы сборки и конвертации — озадачить сразу индизайн и фотошоп. Тогда точно новый скрипт писать надо.
 
Код:
/***
    * Сергей Исаев, г. Тюмень, 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);
 
к сожалению под рукой нет apple устройств, чтобы проверить...
 
MacOS 10.12.6, ID CS6 и CC2018, в индизайне только штатные модули. Скрипт работает.
Оставил в psd bitmap, в tif не захотел переводить. Прогрессбар шевелится, ссылки перелинковываются.
 
MacOS 10.12.6, ID CS6 и CC2018, в индизайне только штатные модули. Скрипт работает.
Оставил в psd bitmap, в tif не захотел переводить. Прогрессбар шевелится, ссылки перелинковываются.
Щито? Скрипт из #4 работает на макос? '%)'
 
Вот этот кусок
Код:
         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();

нужно переписать и
будет конвертить в макосе
 
Кстати, можно всю эту колбасню и не колбасить не создавать файла со скриптом, а заменить одной строчкой.
 
существует очень грамонтый функционал под мак, который умеет все это, в том числе писать пакетно как постраничные ПДФы, джепеги, тифы и прочее, отправлять все это по почте или выкладывать на ФТП.
от компании zevrix
мы покупали всем верстальщикам.
по опыту, я с первой покупки попросил скидку, сославшись на большой курс евро :) мне дали 50%

Automate InDesign printing and exporting | Output Factory
 
Последнее редактирование:
Кстати, можно всю эту колбасню и не колбасить не создавать файла со скриптом, а заменить одной строчкой.
к сожалению, опыта маловато, чтобы изящно это сделать...
@ACTPOHOM, попробую, но однокнопочный вариант, как сейчас - вполне работает на ПиСи, хотелось бы не нагружаться дополнительными лицензиями
@apg_777, да, запустил сейчас на Мак + СС 2018, создался на рабочем столе каталог, точнее два.
 
Работает. Для полного соответствия теме даже поставил CC2018. В один из фолдеров пишет исходники, в другой tifы.
Я, может быть, отстал от прогресса, шагающего широкими шагами, но! В какой версии Mac OS выполняются команды терминала Windows?
 
  • Спасибо
Реакции: Flame
Вызывают шквал оваций чудеса цивиллизации!
 
Работает. Для полного соответствия теме даже поставил CC2018. В один из фолдеров пишет исходники, в другой tifы.
это потому что у вас
Код:
if ( (fileExt == 'tif') || (fileExt == 'tiff') || (fileExt == 'psd') || (fileExt == 'pdf') || (fileExt == 'eps')) {
             // Просто скопировать
             destFileExt = '.' + fileExt;
             doConvert = false;
а вот если png или прочая хрень, то скрипт рухнет
 
не создавать файла со скриптом, а заменить одной строчкой.
Код:
app.doScript('do shell script ("convert ' + colorFile.absoluteURI + '  -compress None '+ paperFile.absoluteURI +' ")', ScriptLanguage.APPLESCRIPT_LANGUAGE);
Примерно так.
Но разбираться в лапша-коде фактически невозможно. Проще переписать заново вообще
 
Не придирайся, на яваскрипте такой код невозможен в принципе. А этот даже комментирован. Причем, местами избыточно. '))'