Photoshop の別名保存(PNG)をスクリプトから実施(Windows)

参考:Specifying compression in PNGSaveOptions broken?

https://community.adobe.com/t5/photoshop/specifying-compression-in-pngsaveoptions-broken/m-p/10232331

課題

  • 別名保存でPNG形式保存時、PNGSaveOptions の compression を変更しても反映されない。(参考の通り)
  • (compressionは、PNGエクスポート用かな?)
  • ActionDescriptor で回避

環境

コード


var s = "高速";
var d1 = new Photoshop.ActionDescriptorClass();

if(s = "高速")
{
d1.PutEnumerated(PhotoshopInstance.App.StringIDToTypeID("method"),
    PhotoshopInstance.App.StringIDToTypeID("PNGMethod"),
    PhotoshopInstance.App.StringIDToTypeID("quick"));

d1.PutEnumerated(PhotoshopInstance.App.StringIDToTypeID("PNGInterlaceType"),
    PhotoshopInstance.App.StringIDToTypeID("PNGInterlaceType"),
    PhotoshopInstance.App.StringIDToTypeID(psOption.Interlaced ? "PNGInterlaceAdam7" : "PNGInterlaceNone"));

d1.PutEnumerated(PhotoshopInstance.App.StringIDToTypeID("PNGFilter"),
    PhotoshopInstance.App.StringIDToTypeID("PNGFilter"),
    PhotoshopInstance.App.StringIDToTypeID("PNGFilterAdaptive"));

d1.PutInteger(PhotoshopInstance.App.StringIDToTypeID("Compression"), psOption.Compression);
}

if(s = "中速")
{
d1.PutEnumerated(PhotoshopInstance.App.StringIDToTypeID("method"),
    PhotoshopInstance.App.StringIDToTypeID("PNGMethod"),
    PhotoshopInstance.App.StringIDToTypeID("moderate")));
}

if(s = "低速")
{
d1.PutEnumerated(PhotoshopInstance.App.StringIDToTypeID("method"),
    PhotoshopInstance.App.StringIDToTypeID("PNGMethod"),
    PhotoshopInstance.App.StringIDToTypeID("thorough"));
}

// 共通
var d = new Photoshop.ActionDescriptorClass();
d.PutObject(PhotoshopInstance.App.StringIDToTypeID("as"),
PhotoshopInstance.App.StringIDToTypeID("PNGFormat"), d1);

d.PutPath(PhotoshopInstance.App.StringIDToTypeID("in"), sav);
d.PutBoolean(PhotoshopInstance.App.StringIDToTypeID("copy"), true);

PhotoshopInstance.App.ExecuteAction(PhotoshopInstance.App.StringIDToTypeID("save"),
d, Photoshop.PsDialogModes.psDisplayNoDialogs);

おわり