終了

パターン名を指定して新規レイヤー塗りつぶしをしたいと考えております

New Here ,
May 01, 2023 May 01, 2023

リンクをクリップボードにコピー

コピー完了

いつもお世話になっております。

 

表題の通り、新規レイヤー塗りつぶしのコマンドにて"パターン名を指定して"パターン塗りつぶしを行いたいと考えております。

アクションの中にこの動作を組み込みたいのですが、普通に手順をアクションに記録するやり方では、

パターン番号を記録されてしまい、パターンで塗りつぶしする際にも記録した時のパターンの番号で塗りつぶしが行われてしまいます。プリセット内にてパターンの追加や削除をよく行うので番号は頻繁に前後する為、パターン名を指定して塗りつぶしをしたいという状況です。

 

スクリプトでやる方法も試してみました。下記の様なスクリプトを走らせてみたのですが…

 

// アクティブなドキュメントを取得
var docRef = app.activeDocument;

// 新しい塗りつぶしレイヤーを作成
var fillLayerRef = docRef.artLayers.add();
fillLayerRef.name = "フローラルパターン";

// パターンを選択
var patternRef = app.getCustomFillPatternByName("フローラルパターン");

// パターンをレイヤーに適用
fillLayerRef.applyCustomPattern(patternRef);

 

"フローラルパターン"というパターン名のパターンをあらかじめ登録しておくことが前提で

このスクリプトを走らせて塗りつぶしを行う予定だったのですが、

  エラー24:app.getCustomFillPatternByNameは関数ではありません。ライン9:var patternRef = app.getCustomFillPatternByName("フローラルパターン");

というエラーが出てどうなおせばスクリプトが正常に動くのか分からずじまいです。

 

スクリプトを使用する方法でも、別の方法でも構わないのですが

新規レイヤーの塗りつぶしでパターン名を指定してパターン塗りつぶしを行う方法はありますでしょうか?ご教授頂けると幸いです。

 

また、当方が使用しているAdobe Photoshop CCは、バージョン : 24.4.1を使用しています。

OSはWindows 10 64ビット となります。

 

宜しくお願い致します。

キーワード
Windows , アクションとスクリプト

表示

380

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

Community Expert , May 01, 2023 May 01, 2023

ScriptingListenerで記録してみました。

引数はパターン名だけ、通常、100% の最小限の内容ですけど。

対象のパターンがグループ(フォルダ)に入っているとだめかもです。

 

fillPattern("hoge");

function fillPattern(patternName){
    var idfill = stringIDToTypeID( "fill" );
        var desc8 = new ActionDescriptor();
        var idusing = stringIDToTypeID( "using" );
        var idfillContents = stringIDToTypeID( "fillContents" );
        var idpattern = stringIDToTypeID( "pattern" );
        desc8.putEnumerated( idusing, idfillContents, idpattern );
        var idpattern
...

投票

翻訳

翻訳
Community Expert ,
May 01, 2023 May 01, 2023

リンクをクリップボードにコピー

コピー完了

ScriptingListenerで記録してみました。

引数はパターン名だけ、通常、100% の最小限の内容ですけど。

対象のパターンがグループ(フォルダ)に入っているとだめかもです。

 

fillPattern("hoge");

function fillPattern(patternName){
    var idfill = stringIDToTypeID( "fill" );
        var desc8 = new ActionDescriptor();
        var idusing = stringIDToTypeID( "using" );
        var idfillContents = stringIDToTypeID( "fillContents" );
        var idpattern = stringIDToTypeID( "pattern" );
        desc8.putEnumerated( idusing, idfillContents, idpattern );
        var idpattern = stringIDToTypeID( "pattern" );
            var desc9 = new ActionDescriptor();
            var idname = stringIDToTypeID( "name" );
            desc9.putString( idname, patternName ); //ここ
            var idID = stringIDToTypeID( "ID" );
            desc9.putString( idID, """112dfbf6-1946-2e47-be4b-ec9235382261""" );
        var idpattern = stringIDToTypeID( "pattern" );
        desc8.putObject( idpattern, idpattern, desc9 );
        var idopacity = stringIDToTypeID( "opacity" );
        var idpercentUnit = stringIDToTypeID( "percentUnit" );
        desc8.putUnitDouble( idopacity, idpercentUnit, 100.000000 );
        var idmode = stringIDToTypeID( "mode" );
        var idblendMode = stringIDToTypeID( "blendMode" );
        var idnormal = stringIDToTypeID( "normal" );
        desc8.putEnumerated( idmode, idblendMode, idnormal );
    executeAction( idfill, desc8, DialogModes.NO );
}

 

 

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
New Here ,
May 02, 2023 May 02, 2023

リンクをクリップボードにコピー

コピー完了

ajabon grinsmith様

 

ご返答頂き有難うございます。

頂きましたスクリプトにて通常のパターン塗りつぶしはパターン名を指定して塗りつぶす事が出来ました。有難うございます。

 

後は新規レイヤーで塗りつぶしにてパターン名を指定して塗りつぶし→塗りつぶし後に登録したパターンをパターン名を指定して削除するスクリプトを組む事が出来れば、目的の物は完成しそうです。

当方スクリプトの知識はなくAIを使ってトライしていたのですが、いき詰っており、ご返答いただいた内容でやっと1歩前進出来ました。あとは何とかやってみたいと思います。

 

本当に有難うございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
May 02, 2023 May 02, 2023

リンクをクリップボードにコピー

コピー完了

>後は新規レイヤーで塗りつぶしにてパターン名を指定して塗りつぶし→塗りつぶし後に登録したパターンをパターン名を指定して削除する

 

ちょっと整理していいですかね…(自分用に)いや、やりませんがw

・新規レイヤー作成

・塗りつぶし(任意のパターンAとする:名前で指定)

・パターンAを削除

でしょうか。

今回の「パターン名を指定して塗りつぶし」に利用したScriptingListenerというプラグインはアドビから提供されているもので、手作業をスクリプトとして記録してデスクトップにログファイルを残すものです。

これも使い慣れると強力です。ふつうスクリプトでできないことでも、これならできたりします。

「photoshop script listener」などでweb検索してみるといいです。

 

>当方スクリプトの知識はなくAIを使ってトライしていた

ええとそれは最初に書きましょうw

スクリプトの質問に協力してくれる人は目的を果たすものをタダで書いてくれるだけではなく、書きかけの今一歩のコードを添削してくれたり、成長を見守ってくれる性格の人が多いです。

次から、最初に書いてもらえると、自分としても吠え面かかずに済みます。。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
New Here ,
May 07, 2023 May 07, 2023

リンクをクリップボードにコピー

コピー完了

ajabon grinsmith様

 

まず、ご返信が遅くなってしまった事 申し訳ございません。

またスクリプト知識がないという情報を伝え漏れていた事もあわせ、大変失礼いたしました。

 

>スクリプトの質問に協力してくれる人は目的を果たすものをタダで書いてくれるだけではなく、書きかけの今一歩のコードを添削してくれたり、成長を見守ってくれる性格の人が多いです。

 

質問に対して、ご協力してくださる方が問題の解決だけでなくその後 為になるアドバイスや成長を考えてご返答して下さる方がいらっしゃるという事、ajabon grinsmith様を例によく分かりました。

以後は自分の情報や状況を伝える事に、まず最重点をおいて質問する様に注意致します。

大変失礼いたしました。

 

>ちょっと整理していいですかね…

 

申し訳ございません。やりたかった事をフォトショップのコマンド順にあらわすと

下記の様になります。

 

メニューバー → レイヤー → 新規塗りつぶしレイヤー → パターン(新規レイヤー名は何でも構わない)

 

上記のコマンドの際に塗りつぶしを行うパターンを事前に登録していたパターンの中からパターン名を指定して(任意のパターンAで)塗りつぶしをしたい というのが目的でした。

また、このスクリプトを走らせる前にアクションの記録でパターン定義で任意のパターンAを事前に登録しておき、スクリプトでこの任意のパターンAで新規塗りつぶしレイヤーコマンドで塗りつぶし、さらにスクリプト内でこの登録したパターンAを削除してパターンプリセットには、塗りつぶしに使用したパターンファイルを残さない(プリセットの整理の手間を省くため)という流れのアクションを作りたかったというのが全貌になります。(今回のスクリプト自体もアクションの中に組み込めないかと考えておりました。)

 

この一連の中でパターン名を指定してというところで、つまずいてしまったので

こちらでご質問をしたのですが、まず質問に答えてくださる方に対し私がどういった事がしたいのか全貌を話すことが絶対に必要であると同時に最低限の礼儀でした。大変申し訳ございませんでした。

 

>「photoshop script listener」などでweb検索してみるといいです

 

大変興味深い情報を有難うございます。

プラグインのScriptingListenerを検索し、情報を集めたいと思います。

プラグインやスクリプト自体を把握してなかったのでこういったものがあること自体大変勉強になりました。本当に有難うございます。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
May 07, 2023 May 07, 2023

リンクをクリップボードにコピー

コピー完了

AIに書いてもらったスクリプトが果たして

完璧なのか、どこまで惜しいのか、あるいは全然だめなのか、

要件通りの動作に何が足りないのか、の正確な把握はご自身のスキルが最低限必要とされるところだと考えます。

 

ちょっと厳しい言い方かもしれませんが、

実務経験のない者(AI)にでたらめにやらせた仕事(スクリプト)を、

「たぶん大部分はできている気がする(実務経験のない人の主観で)、仕上げは実務経験のある人に頼もう」

では、実際のところご自身は何も管理していない、ただリクエストを出すだけの人でしかありません。

 

残念なことにAIで生成した分は、今回の要件を満たすには惜しいと言えるところまでは来ていないかな、と思います。

本当に惜しいところなら、見ていてうずうずしてしまい、つい手を出してしまうのかもしれませんが…

 

スクリプトを勉強した人と、明日からがんばろうと思っている人とで大きく違うところの1つに、

要件を的確に他者に伝えられるかどうか、というのがあります。

そこのところは、別に人間相手でなくても「AIに的確に指示を出せることが上手くなる」でも目的が果たせるなら構わないと思いますが、要努力かなーと思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
New Here ,
May 07, 2023 May 07, 2023

リンクをクリップボードにコピー

コピー完了

最新

仰られるとおりだと思います。

 

基礎知識すらない状態ではどうにもならない事 痛感致しました。

今回教えて頂いた情報なども活用しながら勉強を重ねていきたいと思います。

有難うございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines