2017-08-24 1 views
3

私は明るい色調から暗い色調に色分けしなければならない300+プロファイルのスキントーンのフォルダを持っています。各スキントーンの平均色を取得するアクションを作成することはできますが、ファイルの名前を自動的に変更して各色を識別することはできません。Photoshopのすべてのレイヤー/画像の平均色を検索し、平均色のファイル名で保存するスクリプト

フォルダ内の各画像の平均色(写真全体のうち、通常は[フィルタ]> [ぼかし]> [平均]レイヤ)を検索して、新しい画像をRGBで保存するスクリプトを作成できますか元のファイル名の前に追加された平均色の16進数?

EX:スクリプトの後> [ぼかし]>レイヤーを平均化します。 skintone01.jpgの平均色は#ad8475なので、ファイルの名前をad8475-skintone01.jpgに変更します

また、これが可能かどうかはわかりませんが、すべてのレイヤーを順番に並べる方法はありますかスクリプトを使用して平均色に変換します。私はそれが私達がその話題にいるので、それがそこにそれを得るかもしれないので、それができないかもしれないと思うと思う。

編集:写真のいくつかをテストしたところ、Windowsが16進コードを変な順序で並べ替えるので、16進数によるソートは理想的ではないことがわかりました。これまでのところ、3つの数字の間にスペースがある限り、RGB番号でソートするのが理想的です。

EX:平均色RGBが110 73 58の場合、スクリプトは "1107 58 skintone01.jpg"という新しいファイルの名前を付け、 "1107358 skintone01.jpg"の名前は付けません。ここでも、これはWindowsがファイルをどのようにソートするかによるものです。

** Basciallyが、これは私がフォルダ内の各写真のためのスクリプトを使って何をしたいです:

  1. 重複レイヤ
  2. フィルター>ぼかし>現在の層の平均
  3. コピーRGB値
  4. 現在のレイヤーを平均色で表示しない
  5. 元のファイル名の前にRGB値でイメージを保存します(各RBG値の間にスペースを入れてください)。**
  6. ここ
+0

これは興味深い質問です。そして、私はあなたがこれでどこに行くのか知っていると思います。あなたのソース画像が実際にどのように見えるかわからないことを明確にするには:平均ぼかしの前後に肌の石の画像の例がありますか?あなたは現在、手動でRGB値を作成する画像上の場所を手動で選択していますか?スクリプトはステージ3から離れて真っ直ぐに進んでいなければなりません。これは難しい部分です。 –

+0

これを手伝ってくれてありがとう、ありがとう。以下は、blur>を使用したskintone [リンク](https://imagez.to/i/B6vBxm5x.png)とその平均[link](https://imagez.to/i/5CzOW8g9.jpg)画像全体の平均。私は画像全体の重複レイヤーを平均化しているので、どこからRGB値を作成したのかは関係ありませんでした。はい、PSPアクションだけでは不可能なので、パート3以降は難しい部分ですが、スクリプティングにも慣れていません。 –

答えて

2

ありがとう、グールフール!

私はいくつかの調査と一緒にあなたのスクリプトで遊んで、私のところでPhotoshopのエラーを修正することができました。私は自分の好みにも微調整を加えました。これは私が使用している結果のコードです:、それを平均化する前にアクティブな「ぼやけ」層を作る、その後、サンプリングコードから値を合わせてRGB値をコピーするためのコードを変更した私は

// Set reference for active document 
var srcDoc = app.activeDocument; 

// get filename 
myFileName = srcDoc.name; 
//docName = myFileName.substring(0,myFileName.lastIndexOf(".")); 

//Duplicate Layer and call it "blurred" 
var layerName = "blurred"; 
srcDoc.activeLayer.duplicate().name = layerName; 

//Select "Blurred" Layer 
activeDocument.activeLayer = activeDocument.artLayers.getByName("blurred"); 

// Filter > Blur > Average 
srcDoc.activeLayer.applyAverage(); 

// remove any sample first 
srcDoc.colorSamplers.removeAll(); 

// get width and height of image 
var w = srcDoc.width.value; 
var h = srcDoc.height.value; 

// get positions of the center of the image 
//var x = 0; 
//var y = 0; 
var x = Math.round(w/2); 
var y = Math.round(h/2); 

// will pick a sample from the middle of the image 
var px = [UnitValue(x) , UnitValue(y)]; 
var skinSampler = srcDoc.colorSamplers.add(px); 

// Copy RGB Values of current layer with 3 decimal spaces 
var myColor = skinSampler.color; 
var rgb_R = Math.round(myColor.rgb.red*1000)/1000; 
var rgb_G = Math.round(myColor.rgb.green*1000)/1000; 
var rgb_B = Math.round(myColor.rgb.blue*1000)/1000; 

// remove that sample no we know it's value 
srcDoc.colorSamplers.removeAll(); 

// Turn current layer (one with the average color) invisible 
srcDoc.activeLayer.visible = false; 

// Save image with RGB values before the original filename (with a space between each RBG value). 
mySaveName = rgb_R + " " + rgb_G + " " + rgb_B + " " + myFileName; 

// Set filePath and fileName to source path 
var filePath = srcDoc.path + "/" + mySaveName; 

// save as jpeg 
jpegIt(filePath, 12); 

// function for saving as jpeg 
function jpegIt(filePath, myJpgQuality) 
{ 
    if(! myJpgQuality) myJpgQuality = 12; 

    // Flatten the jpg 
    activeDocument.flatten(); 

    // jpg file options 
    var jpgFile = new File(filePath); 
    jpgSaveOptions = new JPEGSaveOptions(); 
    jpgSaveOptions.formatOptions = FormatOptions.OPTIMIZEDBASELINE; 
    jpgSaveOptions.embedColorProfile = true; 
    jpgSaveOptions.matte = MatteType.NONE; 
    jpgSaveOptions.quality = myJpgQuality; 

    activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE); 

    //close without saving 
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES); 
} 

すべて。次に、結果を3小数点まで丸めるようにコードを追加しました。

私は、新しいフォルダに新しい画像をすべて保存するスクリプトを取得できるかどうかを確認しようとしましたが、その方法を理解できませんでした。笑。しかし、少なくとも私はそれを働かせました。

ありがとうございました。私はあなたなしでこれにすることができず、おそらく数時間私のコンピュータの前に座っていただろう。 :D

1

わかりましたが、何が必要です:

// Set reference for active document 
var srcDoc = app.activeDocument; 

// get filename 
myFileName = srcDoc.name; 
//docName = myFileName.substring(0,myFileName.lastIndexOf(".")); 

//Duplicate Layer and call it "blurred" 
var layerName = "blurred"; 
srcDoc.activeLayer.duplicate().name = layerName; 

// Filter > Blur > Average 
srcDoc.activeLayer.applyAverage(); 


// remove any sample first 
srcDoc.colorSamplers.removeAll(); 

// get width and height of image 
var w = srcDoc.width.value; 
var h = srcDoc.height.value; 

// get positions of the center of the image 
//var x = 0; 
//var y = 0; 
var x = Math.round(w/2); 
var y = Math.round(h/2); 

// will pick a sample from the middle of the image 
var px = [UnitValue(x) , UnitValue(y)]; 
var skinSampler = srcDoc.colorSamplers.add(px); 

// Copy RGB Values of current layer 
var myColour = myColorSampler.color; 
var rgb_R = myColor.rgb.red; 
var rgb_G = myColor.rgb.green; 
var rgb_B = myColor.rgb.blue; 

// remove that sample no we know it's value 
srcDoc.colorSamplers.removeAll(); 

// Turn current layer (one with the average color) invisible 
srcDoc.activeLayer.visible = false; 

// Save image with RGB values before the original filename (with a space between each RBG value). 
mySaveName = rgb_R + " " + rgb_G + rgb_B + myFileName; 

// Set filePath and fileName to source path 
var filePath = srcDoc.path + "/" + mySaveName; 

// save as jpeg 
jpegIt(filePath, 12); 

// function for saving as jpeg 
function jpegIt(filePath, myJpgQuality) 
{ 
    if(! myJpgQuality) myJpgQuality = 12; 

    // Flatten the jpg 
    activeDocument.flatten(); 

    // jpg file options 
    var jpgFile = new File(filePath); 
    jpgSaveOptions = new JPEGSaveOptions(); 
    jpgSaveOptions.formatOptions = FormatOptions.OPTIMIZEDBASELINE; 
    jpgSaveOptions.embedColorProfile = true; 
    jpgSaveOptions.matte = MatteType.NONE; 
    jpgSaveOptions.quality = myJpgQuality; 

    activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE); 

    //close without saving 
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES); 
} 

私はこのブラインドをやっている、しかし動作するはずです。

+0

ああ、ありがとう!私はちょうどそれをテストし、Adobeは "srcDoc.activeLayer.applyAvergeBlur(avg);"というエラーを投げています。関数ではありません。 –

+0

applyAverage()に変更しました。代わりに。 –

+0

この修正はうまくいきましたが、今度はこのエラーを投げます:[link](https://imagez.to/i/pT8J29gF.jpg)。複製されたものではなく、下のレイヤーがぼやけているという事実で、何かをしなければならないかもしれないと私は思う。 –

関連する問題