1

rb-appscript を使用して、PSD を PNG としてエクスポートするスクリプトを作成しました。それは問題なくダンディですが、py-appscriptでそれをやってのけることができないようです。

ルビーコードは次のとおりです。

#!/usr/bin/env ruby

require 'rubygems'
require 'optparse'
require 'appscript'

ps = Appscript.app('Adobe Photoshop CS5.app')
finder = Appscript.app("Finder.app")

path = "/Users/nbaker/Desktop/"
ps.activate
ps.open(MacTypes::Alias.path("#{path}guy.psd"))

layerSets = ps.current_document.layer_sets.get

# iterate through all layers and hide them
ps.current_document.layers.get.each do |layer|
    layer.visible.set false 
end 

layerSets.each do |layerSet|
    layerSet.visible.set false
end

# iterate through all layerSets, make them visible, and create a PNG for them
layerSets.each do |layerSet|
    name = layerSet.name.get
    layerSet.visible.set true
    ps.current_document.get.export(:in => "#{path}#{name}.png", :as => :save_for_web, 
                             :with_options => {:web_format => :PNG, :png_eight => false})
    layerSet.visible.set false
end

そして、明らかに同等ではない python コードを次に示します。

from appscript import *
from mactypes import *

# fire up photoshop
ps = app("Adobe Photoshop CS5.app")
ps.activate()

# open the file for editing
path = "/Users/nbaker/Desktop/"
f = Alias(path + "guy.psd")
ps.open(f)

layerSets = ps.current_document.layer_sets()

# iterate through all layers and hide them
for layer in ps.current_document.layers():
    layer.visible.set(False)  

#... and layerSets  
for layerSet in layerSets:  
    layerSet.visible.set(False)

# iterate through all layerSets, make them visible, and create a PNG for them
for layerSet in layerSets:
    name = layerSet.name()
    layerSet.Visible = True
    ps.current_document.get().export(in_=Alias(path + name + ".png"), as_=k.save_for_web,
                 with_options={"web_format":k.PNG, "png_eight":False})

動作しない python スクリプトの唯一の部分は、保存です。さまざまなエクスポートオプションなどを試してみると、あらゆる種類のエラーが発生しました。

接続が無効です... 一般的な Photoshop エラーが発生しました。この機能は、このバージョンの Photoshop では使用できない可能性があります...一部のデータを期待されるタイプに変換できません...

ruby スクリプトだけで十分ですが、他のスクリプトはすべて python で作成されているため、これを python で実行できると便利です。事前にインターネットに感謝します。

4

1 に答える 1

1

バート、

数か月後ですが、解決策があると思います。私は Python 初心者なので、これは決してエレガントではないことに注意してください。

あなたのスクリプトを試してみると、私もクラッシュし続けました。ただし、エクスポート呼び出しで「エイリアス」を削除すると、問題ないようです。

from appscript import *
from mactypes import *

# fire up photoshop
ps = app("Adobe Photoshop CS5.1.app")
ps.activate()

# open the file for editing
path = "/Users/ian/Desktop/"
f = Alias(path + "Screen Shot 2011-10-13 at 11.48.51 AM.psd")
ps.open(f)

layerSets = ps.current_document.layer_sets()

# no need to iterate
ps.current_document.layers.visible.set(False)
ps.current_document.layer_sets.visible.set(False)

# iterate through all layerSets, make them visible, and create a PNG for them
for l in layerSets:
    name = l.name()
    # print l.name()
    l.visible.set(True)
    # make its layers visible too
    l.layers.visible.set(True)
    # f = open(path + name + ".png", "w").close()

    ps.current_document.get().export(in_=(path + name + ".png"), as_=k.save_for_web,
                 with_options={"web_format":k.PNG, "png_eight":False})

また、可視性を切り替えるためにすべてのレイヤーを反復処理していることにも気付きました。実際には、すべてのコマンドを一度に発行するだけで済みます。私の理解では、Apple Events を発行し続ける必要がないため、その方が高速です。

私のスクリプトのロジックは (レイヤーのオンとオフに関して) 正しくありませんが、アイデアはわかります。

イアン

于 2011-12-07T04:31:13.883 に答える