Как поменять Exif метаданные средствами шопа?

  • Автор темы Автор темы _MBK_
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 777
Реакции
11 046
Не пойму, то ли адобовские индусы как всегда перемудрили, то ли у меня мозг замылен?
Нужно поменять Exif метаданные файла, именно Exif, причем нестандартные, в частности User Comments. Стандартного свойства в Document.info , которое можно было бы поменять, не существует, но есть массив массивов exif, где все поля перечисляются. Но, как назло, именно он из всех свойств зачем-то сделан Read only - поменять ни один тэг в нем невозможно! 'otbline'
Ладно, действуем хитрее: создаем новый документ через экшн:
Код:
...
var id1 = charIDToTypeID( "Mk  " );
    var desc1 = new ActionDescriptor();
    var id2 = charIDToTypeID( "Nw  " );
        var desc2 = new ActionDescriptor();
        var id3 = charIDToTypeID( "Md  " );
        var id4 = charIDToTypeID( "RGBM" );
        desc2.putClass( id3, id4 );
        var id5 = charIDToTypeID( "Wdth" );
        var id6 = charIDToTypeID( "#Rlt" );
        desc2.putUnitDouble( id5, id6, 480.000000 );
        var id7 = charIDToTypeID( "Hght" );
        var id8 = charIDToTypeID( "#Rlt" );
        desc2.putUnitDouble( id7, id8, 476.000000 );
        var id9 = charIDToTypeID( "Rslt" );
        var id10 = charIDToTypeID( "#Rsl" );
        desc2.putUnitDouble( id9, id10, 72.000000 );
        var id11 = stringIDToTypeID( "pixelScaleFactor" );
        desc2.putDouble( id11, 1.000000 );
        var id12 = charIDToTypeID( "Fl  " );
        var id13 = charIDToTypeID( "Fl  " );
        var id14 = charIDToTypeID( "Wht " );
        desc2.putEnumerated( id12, id13, id14 );
        var id15 = charIDToTypeID( "Dpth" );
        desc2.putInteger( id15, 8 );
        var id16 = stringIDToTypeID( "profile" );
        desc2.putString( id16, "sRGB IEC61966-2.1" );
        var id18 = stringIDToTypeID( "EXIF" );
        desc2.putString( id18, "EXIF tag 137510 TestComment" );
    var id17 = charIDToTypeID( "Dcmn" );
    desc1.putObject( id2, id17, desc2 );
executeAction( id1, desc1, DialogModes.NO );
...
Вроде не ругается, документ создается, но поля EXIF в нем нет 'otbline'
Где я туплю, в какую сторону копать?
 

Не по теме:
Чем обусловлен выбор инструмента?
 
Возможно, по смыслу прокатит поле «instructions».
Да нет, конечно, не прокатит, нужно модифицировать поля с определенным ID
Хоть руками поправляй потом в готовом жпеге, печаль *(
Чем обусловлен выбор инструмента?
А как иначе? Exiftool из скрипта вызывать нельзя *(
 
хм, а document.xmpMetadata не содержит это все разве?

EXIF и из панели FileInfo не меняется, так что в этом плане они последовательны

>Exiftool из скрипта вызывать нельзя

почему?

Application.system (callString: string ):int
Adobe Photoshop CC 2015 Object Library
Perform a system call.
callString: Data Type: string
System call string.
 
Последнее редактирование:
>вдобавок там же тоже red only

нет, там не read only
.rawData можно переписать

хотя с изменением EXIF не прокатывает, кажется, фотошоп отторгает изменения
 
>в более ранних уже не работает

работало спокон веков...

>Ну разве что так, но где там Exif?

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

Код:
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c111 79.158325, 2015/09/10-01:10:20        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
            xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
            xmlns:exif="http://ns.adobe.com/exif/1.0/">
         <xmp:ModifyDate>2013-11-16T19:38:44</xmp:ModifyDate>
         <xmp:CreateDate>2013-11-16T19:38:44</xmp:CreateDate>
         <xmp:MetadataDate>2013-11-16T19:38:44</xmp:MetadataDate>
         <photoshop:DateCreated>2013-11-16T19:38:44</photoshop:DateCreated>
         <photoshop:ColorMode>3</photoshop:ColorMode>
         <photoshop:ICCProfile>sRGB IEC61966-2.1</photoshop:ICCProfile>
         <xmpMM:DocumentID>6DA8BD30DB200ABE1457A8610B0B4E4F</xmpMM:DocumentID>
         <xmpMM:InstanceID>6DA8BD30DB200ABE1457A8610B0B4E4F</xmpMM:InstanceID>
         <dc:format>image/jpeg</dc:format>
         <dc:description>
            <rdf:Alt>
               <rdf:li xml:lang="x-default">                               </rdf:li>
            </rdf:Alt>
         </dc:description>
         <tiff:ImageWidth>4224</tiff:ImageWidth>
         <tiff:ImageLength>2376</tiff:ImageLength>
         <tiff:BitsPerSample>
            <rdf:Seq>
               <rdf:li>8</rdf:li>
               <rdf:li>8</rdf:li>
               <rdf:li>8</rdf:li>
            </rdf:Seq>
         </tiff:BitsPerSample>
         <tiff:PhotometricInterpretation>2</tiff:PhotometricInterpretation>
         <tiff:Orientation>1</tiff:Orientation>
         <tiff:SamplesPerPixel>3</tiff:SamplesPerPixel>
         <tiff:YCbCrPositioning>2</tiff:YCbCrPositioning>
         <tiff:XResolution>350/1</tiff:XResolution>
         <tiff:YResolution>350/1</tiff:YResolution>
         <tiff:ResolutionUnit>2</tiff:ResolutionUnit>
         <tiff:Make>SONY</tiff:Make>
         <tiff:Model>HDR-PJ580E</tiff:Model>
         <exif:ExifVersion>0230</exif:ExifVersion>
         <exif:FlashpixVersion>0100</exif:FlashpixVersion>
         <exif:ColorSpace>1</exif:ColorSpace>
         <exif:CompressedBitsPerPixel>2/1</exif:CompressedBitsPerPixel>
         <exif:PixelXDimension>4224</exif:PixelXDimension>
         <exif:PixelYDimension>2376</exif:PixelYDimension>
         <exif:DateTimeOriginal>2013-11-16T19:38:44</exif:DateTimeOriginal>
         <exif:ExposureTime>1/50</exif:ExposureTime>
         <exif:FNumber>24/10</exif:FNumber>
         <exif:ExposureProgram>2</exif:ExposureProgram>
         <exif:ShutterSpeedValue>5643856/1000000</exif:ShutterSpeedValue>
         <exif:ApertureValue>2526069/1000000</exif:ApertureValue>
         <exif:ExposureBiasValue>0/100</exif:ExposureBiasValue>
         <exif:MaxApertureValue>646/256</exif:MaxApertureValue>
         <exif:MeteringMode>5</exif:MeteringMode>
         <exif:LightSource>0</exif:LightSource>
         <exif:Flash rdf:parseType="Resource">
            <exif:Fired>True</exif:Fired>
            <exif:Return>3</exif:Return>
            <exif:Mode>3</exif:Mode>
            <exif:Function>False</exif:Function>
            <exif:RedEyeMode>True</exif:RedEyeMode>
         </exif:Flash>
         <exif:FocalLength>61/10</exif:FocalLength>
         <exif:FileSource>3</exif:FileSource>
         <exif:SceneType>1</exif:SceneType>
         <exif:CustomRendered>0</exif:CustomRendered>
         <exif:ExposureMode>0</exif:ExposureMode>
         <exif:WhiteBalance>0</exif:WhiteBalance>
         <exif:DigitalZoomRatio>16/16</exif:DigitalZoomRatio>
         <exif:SceneCaptureType>0</exif:SceneCaptureType>
         <exif:Contrast>0</exif:Contrast>
         <exif:Saturation>0</exif:Saturation>
         <exif:Sharpness>0</exif:Sharpness>
         <exif:LensInfo>
            <rdf:Seq>
               <rdf:li>0/0</rdf:li>
            </rdf:Seq>
         </exif:LensInfo>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
 
Гм интересно у меня exif туда не сует кроме самых базовых
upload_2016-2-15_19-4-56.png

Так говоришь и перезаписать нельзя?
 
я пробовал поменять пару полей exif:, остается как было.
 
я пробовал поменять пару полей exif:, остается как было.
Ну, видимо, чисто информативно отображает, все равно как в ActionDescription - посмотреть можно, а при установке в реальном документе не меняется *[[
 
в плагине можно попробовать переписать, там доступа побольше
 
Тогда уж проще из скрипта тэг нужный в жпег руками вставить
Так что, получается, не из CC 2015 даже Exiftools не вызвать никак? *(
 
app.system был спокон веков, протестируй
 
  • Спасибо
Реакции: _MBK_
В CS3 не работает, а в CS6 уже есть - ну хоть как крайний вариант сгодится
 
Последнее редактирование:
Допустим значение, которое нужно внести генерируется в скрипте. вызывать стороннюю программу действительно довольно коряво, причем выполнение скрипта идет дальше, а app.system() толком ничего полезного не возвращает. Или есть что-то, о чем мы не знаем?
 
  • Спасибо
Реакции: Jeine и _MBK_
Именно так. Вызов внешней программы из скрипта - очень неприятный костыль. Вдобавок это не кроссплатформенно да и тормозит не по детски
 
  • Спасибо
Реакции: Jeine
Статус
Закрыто для дальнейших ответов.