[PS CC-CC2021] Открытие файла SVG через скрипт

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Добрый день. Столкнулся с необходимостью конвертировать много файлов SVG в растровый формат средствами Photoshop, решил написать скрипт для этой цели. Не удается найти метод правильно открыть файл SVG через скрипт, нужно указать разрешение для растрирования. С PDF и EPS все предельно понятно - создаем объект PDFOpenOptions или EPSOpenOptions, задаем нужные параметры и командуем app.open(file, наш PDFOpenOptions).
А для SVG такого функционала я не нашел.
Подскажите, пожалуйста, это я плохо ищу или такого функционала нет в Photoshop?
Если такой метод есть, прошу помочь. Спасибо
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А фотошоп вообще умеет SVG открывать? В моем, например, SVG нет даже в списке открываемых форматов. А уж отдельного класса опций открытия нет однозначно.
 

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Да, умеет. Я сначала попробовал на примере одного файла открыть SVG вручную, все открывается и работает. В окошке можно задать разрешение для растрирования, точно как с PDF и EPS. Версия CC2018
 

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
А почему не средствами Illustrator?

Достаточно специфическая задача, растровый формат - это GIF 256 цветов с точным DPI. Я (пока что) не уверен, что Illustrator умеет экспортировать в такой формат
 

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200

imma

15 лет на форуме
Сообщения
3 089
Реакции
2 185
Он не умеет сохранять в gif. Batch + action могут справиться.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Да, умеет. Я сначала попробовал на примере одного файла открыть SVG вручную, все открывается и работает. В окошке можно задать разрешение для растрирования, точно как с PDF и EPS. Версия CC2018
Тогда попробуйте зайти со стороны заднего прохода: через ScriptListener гляньте как комбинация открытия svg с сопутствующими опциями записывается в скрипт и используйте данный участок кода.
 
  • Спасибо
Реакции: veretragna

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Тогда попробуйте зайти со стороны заднего прохода: через ScriptListener гляньте как комбинация открытия svg с сопутствующими опциями записывается в скрипт и используйте данный участок кода.

Выглядит как решение! Никогда не пользовался ScriptListener, но, думаю, должно помочь.
Спасибо! Напишу, что в итоге получилось.
 

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Ох и больной на голову код генерирует ScriptListener. Но, возможно, иначе это и не сделать.
ScriptListener проворачивает открытие SVG через действия Photoshop. Вот такой код получился:
С этим уже можно работать.
Спасибо, _MBK_ !


JavaScript:
var idOpn = charIDToTypeID( "Opn " );
    var desc15 = new ActionDescriptor();
    var iddontRecord = stringIDToTypeID( "dontRecord" );
    desc15.putBoolean( iddontRecord, false );
    var idforceNotify = stringIDToTypeID( "forceNotify" );
    desc15.putBoolean( idforceNotify, true );
    var idnull = charIDToTypeID( "null" );
    desc15.putPath( idnull, new File( "путь к файлу / файл.svg" ) );
    var idAs = charIDToTypeID( "As  " );
        var desc16 = new ActionDescriptor();
        var idWdth = charIDToTypeID( "Wdth" );
        var idRlt = charIDToTypeID( "#Rlt" );
        desc16.putUnitDouble( idWdth, idRlt, 381.920000 );
        var idRslt = charIDToTypeID( "Rslt" );
        var idRsl = charIDToTypeID( "#Rsl" );
        desc16.putUnitDouble( idRslt, idRsl, 450.000000 );
        var idMd = charIDToTypeID( "Md  " );
        var idClrS = charIDToTypeID( "ClrS" );
        var idRGBC = charIDToTypeID( "RGBC" );
        desc16.putEnumerated( idMd, idClrS, idRGBC );
        var idAntA = charIDToTypeID( "AntA" );
        desc16.putBoolean( idAntA, true );
        var idCnsP = charIDToTypeID( "CnsP" );
        desc16.putBoolean( idCnsP, true );
    var idsvgFormat = stringIDToTypeID( "svgFormat" );
    desc15.putObject( idAs, idsvgFormat, desc16 );
    var idDocI = charIDToTypeID( "DocI" );
    desc15.putInteger( idDocI, 204 );
executeAction( idOpn, desc15, DialogModes.NO );
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А чем вам код не нравится? Вполне укладывающийся в общую схему. И опции открытия на ладони. В CS3 например вообще ничего не генерит и ошибку выдает.
 

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Мне бы понравился вот примерно такой код:
JavaScript:
var epsOpts = new EPSOpenOptions(); 
epsOpts.resolution = 72; 
var fileRef = new File ("filename.eps"); 
var docRef = app.open(fileRef, epsOpts);
Принцип открытия файла через executeAction мне понятен, но кажется слишком громоздким.
А к функционалу претензий нет, подчищу, протестирую и буду использовать