第二編:JavaScriptを利用して、PSスクリプトを作成し、写真量産ツールを開発する.
50151 ワード
背景:実业のある电商会社にいます.设计部の妹たちはいつもやりきれない商品の写真を持っています.もちろん、技术的な美化があったらいいですが、最近はつまらないです.価格札です.これはつまらないですね.テンプレートをあげて、自分でテンプレートのもとの文字の写真を交換すればいいです.もう一回のレイアウトを作って、体力労働をしてもいいですか?ブログ主は日本向けのアウトソーシングをしています.彼女たちの苦しみをよく知っています.もしある対日アウトソーシングのプログラム猿が人肉トランスコーダだと言ったら、デザイン部の妹たちは今になっています.もういいです.言葉はもういいです.残酷です.
==========================================================================================================================================
手がかり:バックグラウンドの引継ぎの状況に対して、ボスは私にヒントを与えました.PSスクリプトは、この手がかりに沿って、一連の調査を行いました.Photoshop CS 5 Scripting Gide.pdfとPhotoshop CS 5 JavaScript Ref.pdfを参考しました.もちろん、持参した文書はまだ私の需要を満たしていないようです.私は自分でJavaScript Tools Guideをダウンロードしました.CS 5.5 pdfは、この3つの文書を抱えてかじったり、まとめてこのような量産ツールを完成させました.
=========================================================================================================================================
開発の構想:量産ツールである以上、彼の仕事の流れはこうなるべきです.1ツールはファイルを読み、ファイルはすべての製品の情報を含み、2サイクルは商品ごとの情報を抽出し、画像を生成して保存し、3サイクルは終わったら、ヒントを与えます.
=========================================================================================================================================
コードは以下の通りです
1:博主逗比でしょう.XMLタグは中国語でどう使いますか?
2:productノードを2回書いて何をしますか?手が震えますか
えっと、自分は面白いと知っていますが、開発当初からXMLでデータを保存するのではなく、CVSファイルやPRNファイルを使ってデータソースを保存できるという夢を持っていましたが、失敗に終わってしまいました.商品の説明には何でも保存できるので、萌え編集者は何でも書きます.若いから、何を使ってデータを分割したらいいのか分かりません.
はい、問題1に戻ります.なぜ中国語を使いますか?13を入れないようにして、技術者以外にも見てもらうためです.なぜですか?Excelでこのテンプレートファイルを開けます.Excelはサブノードをフィールドとして名来に表示します.たとえば、
コードで見られます.通過しました.
問題2を見てください.なぜ2回書いたのですか?これはExcelに聞きます.一つのサブノードだけ書くと、Excelには表頭がないので、二つ書いたら表頭がある表があります.次の通りです.
商品コード
内外コード
価格
5パックの費用
費用を自己負担する
サイズ
産地
材質
製品の写真の住所
製品の二次元コードアドレス
はい、Excelを使って製品情報を記入して、XMlデータファイルに保存します.準備が終わったら、次は奇跡を目撃する時です.
どうやって運行しますか?ページで実行しますか?似てないですね.アプリは何ですか?ブラウザは知っていますか?
実際には、photo Shopで実行されています.作成したスクリプトをAdobe Photoshop CS 5\Presets\Scriptの下に置いて、PSを開いたら、もう開いていたのはPSを再起動します.その後、PS->ファイル->スクリプトの下に入れたスクリプトファイルを発見します.デフォルトはサポートです.実行をクリックすると、レイヤーや文字、ブラシの生成、ブラシのオフ、自動化の感覚がいいですね.コードの中の画像の生成速度は10 sぐらいで、最高画質のものも受け入れられます.
はい、こんなに多くのことを書きました.一つは自分の心得を記録するためです.もう一つは重複性の設計に深くはまり込んでいる人たちに助けを求めています.脚本の知識を少し知っていたら、英語の文書が読めます.とてもかっこいいです.PSスクリプトは私にとって新鮮なものです.もしかしたら私が書いたこれらのおもちゃはとっくに大神さんが私の前に書いたことがあります.しかも効率がもっと高いです.既製のソフトウェアがあれば直接生成できます.もしかしたら、多くの無駄を作ったかもしれません.でも大丈夫です.時には穴ではないので、中に入ってから這い上がるしかないですか?これでやっと回り道ができます.ブログはこれまで、技術大神さんとデザイナーさんがあまり重視しなくてもいいです.この小さいブログは初心者向けの小さい例しかないです.例えば、私はプログラマーとして、二日前にPSがシナリオを実行できることを知らなかったです.私と同じような友達に興味があれば、まず脚本を書いてもいいです.alert自分のハローワールド!ははは~
==========================================================================================================================================
手がかり:バックグラウンドの引継ぎの状況に対して、ボスは私にヒントを与えました.PSスクリプトは、この手がかりに沿って、一連の調査を行いました.Photoshop CS 5 Scripting Gide.pdfとPhotoshop CS 5 JavaScript Ref.pdfを参考しました.もちろん、持参した文書はまだ私の需要を満たしていないようです.私は自分でJavaScript Tools Guideをダウンロードしました.CS 5.5 pdfは、この3つの文書を抱えてかじったり、まとめてこのような量産ツールを完成させました.
=========================================================================================================================================
開発の構想:量産ツールである以上、彼の仕事の流れはこうなるべきです.1ツールはファイルを読み、ファイルはすべての製品の情報を含み、2サイクルは商品ごとの情報を抽出し、画像を生成して保存し、3サイクルは終わったら、ヒントを与えます.
=========================================================================================================================================
コードは以下の通りです
1 // :PhotoShop CS5 12.0.3 x32
2 // :Duke
3 // :2014/08/24
4
5 priceCardGenerator()
6
7 function priceCardGenerator(){
8
9 /**
10 *
11 */
12 var title //
13 var liwaiCode //
14 var priceTitle // ,
15 var price //
16 var sample //
17 var fiveAssureFeeTitle // ,
18 var fiveAssureFee //
19 var seftFeeTitle // ,
20 var seftFee //
21 var size //
22 var producingArea //
23 var material //
24
25 /**
26 *
27 */
28 var tipFont = "MicrosoftYaHei-Bold"
29 var valueFont = "MicrosoftYaHei"
30 var priceFont = "Century Gothic"
31
32 /**
33 *
34 */
35 //
36 var priceColor = new SolidColor()
37 priceColor.rgb.red = 208
38 priceColor.rgb.green = 28
39 priceColor.rgb.blue = 119
40 //
41 var topBarColor = new SolidColor()
42 topBarColor.rgb.red = 212
43 topBarColor.rgb.green = 0
44 topBarColor.rgb.blue = 102
45
46 /**
47 *
48 */
49 // logo
50 var logoImg = app.open(File("D:/priceCard/liwailogo.jpg"))
51
52 //
53 var dataFile = new File("D:/priceCard/priceCardData.xml")
54 // “ ”
55 dataFile.open("r")
56
57 //
58 var xmlCode = dataFile.read()
59 //alert(xmlCode)
60
61 //
62 if(xmlCode == ""){
63 alert(" ")
64 return
65 }
66
67 // XML
68 var products = new XML(xmlCode)
69
70 //
71 var productCount = products.product.length()
72
73 //
74 for( i = 0;i < productCount;i++){
75
76 //
77 title = products.product[i].elements()[0]
78 liwaiCode = " :" + products.product[i].elements()[1]
79 priceTitle = " "
80 price = products.product[i].elements()[2]
81 sample = "¥"
82 fiveAssureFeeTitle = " "
83 fiveAssureFee = "¥" + products.product[i].elements()[3]
84 seftFeeTitle = " "
85 seftFee = "¥" + products.product[i].elements()[4]
86 size = products.product[i].elements()[5]
87 producingArea = products.product[i].elements()[6]
88 material = products.product[i].elements()[7]
89
90 // ,
91 var originalUnit = preferences.rulerUnits
92 preferences.rulerUnits = Units.PIXELS
93
94 //
95 var docRef = app.documents.add( 886, 561 ,72.0,"tempDoc")
96
97 // ,
98 // “ ” , “fill ”
99 docRef.selection.select([[0,0],[0,20],[886,20],[886,0]],SelectionType.EXTEND)
100 var selRef = docRef.selection
101 selRef.fill( topBarColor, ColorBlendMode.NORMAL, 100, false)
102
103 //
104 var layerSetRef =docRef.layerSets.add()
105 layerSetRef.name = " "
106
107 // logo
108 app.activeDocument = logoImg
109 // logo
110 var logoLayer = logoImg.activeLayer
111 //
112 var logoLayerTemp = logoLayer.duplicate(layerSetRef,
113 ElementPlacement.PLACEATEND)
114 //
115 app.activeDocument=docRef
116 //logo
117 logoLayerTemp.translate(-265,225)
118
119 //
120 var qrCodeImg = app.open(File(products.product[i].elements()[9]))
121 //
122 app.activeDocument = qrCodeImg
123 //
124 var qrCodeImgLayer = qrCodeImg.activeLayer
125 //
126 var qrCodeImgLayerTemp = qrCodeImgLayer.duplicate(layerSetRef,
127 ElementPlacement.PLACEATEND)
128 //
129 app.activeDocument=docRef
130 //
131 qrCodeImgLayerTemp.translate(320,180)
132 //
133 qrCodeImg.close(SaveOptions.DONOTSAVECHANGES)
134
135 //
136 var productImg = app.open(File(products.product[i].elements()[8]))
137 //
138 app.activeDocument = productImg
139 //
140 var productImgLayer = productImg.activeLayer
141 //
142 var productImgLayerTemp = productImgLayer.duplicate(layerSetRef,
143 ElementPlacement.PLACEATEND)
144 //
145 app.activeDocument=docRef
146 //
147 productImgLayerTemp.translate(200,-50)
148 //
149 productImg.close(SaveOptions.DONOTSAVECHANGES)
150
151 /**
152 *
153 */
154 //
155 var proNameLayerRef = docRef.artLayers.add()
156 proNameLayerRef.kind = LayerKind.TEXT
157 var proNameTextItemRef = proNameLayerRef.textItem
158 proNameTextItemRef.contents = title
159 proNameTextItemRef.position = Array(55, 70)
160 proNameTextItemRef.font = tipFont
161 proNameTextItemRef.size = 30
162
163 //
164 var liwaiCodeLayerRef = docRef.artLayers.add()
165 liwaiCodeLayerRef.kind = LayerKind.TEXT
166 var liwaiCodeTextItemRef = liwaiCodeLayerRef.textItem
167 liwaiCodeTextItemRef.contents = liwaiCode
168 liwaiCodeTextItemRef.position = Array(55, 95)
169 liwaiCodeTextItemRef.font = valueFont
170 liwaiCodeTextItemRef.size = 14
171
172 //
173 var liwaiCodeLayerRef = docRef.artLayers.add()
174 liwaiCodeLayerRef.kind = LayerKind.TEXT
175 var liwaiCodeTextItemRef = liwaiCodeLayerRef.textItem
176 liwaiCodeTextItemRef.contents = priceTitle
177 liwaiCodeTextItemRef.position = Array(55, 135)
178 liwaiCodeTextItemRef.font = tipFont
179 liwaiCodeTextItemRef.size = 22
180
181 //¥
182 var sampleLayerRef = docRef.artLayers.add()
183 sampleLayerRef.kind = LayerKind.TEXT
184 var sampleTextItemRef = sampleLayerRef.textItem
185 sampleTextItemRef.contents = sample
186 sampleTextItemRef.position = Array(50, 235)
187 sampleTextItemRef.font = tipFont
188 sampleTextItemRef.size = 40
189 sampleTextItemRef.color = priceColor
190
191 //
192 var liwaiPriceLayerRef = docRef.artLayers.add()
193 liwaiPriceLayerRef.kind = LayerKind.TEXT
194 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
195 liwaiPriceTextItemRef.contents = price
196 liwaiPriceTextItemRef.position = Array(105, 235)
197 liwaiPriceTextItemRef.font = valueFont
198 liwaiPriceTextItemRef.size = 100
199 liwaiPriceTextItemRef.color = priceColor
200
201 //
202 var liwaiPriceLayerRef = docRef.artLayers.add()
203 liwaiPriceLayerRef.kind = LayerKind.TEXT
204 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
205 liwaiPriceTextItemRef.contents = fiveAssureFeeTitle
206 liwaiPriceTextItemRef.position = Array(55, 275)
207 liwaiPriceTextItemRef.font = tipFont
208 liwaiPriceTextItemRef.size = 20
209
210 //
211 var liwaiPriceLayerRef = docRef.artLayers.add()
212 liwaiPriceLayerRef.kind = LayerKind.TEXT
213 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
214 liwaiPriceTextItemRef.contents = fiveAssureFee
215 liwaiPriceTextItemRef.position = Array(140, 275)
216 liwaiPriceTextItemRef.font = valueFont
217 liwaiPriceTextItemRef.size = 18
218 liwaiPriceTextItemRef.color = priceColor
219
220 //
221 var liwaiPriceLayerRef = docRef.artLayers.add()
222 liwaiPriceLayerRef.kind = LayerKind.TEXT
223 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
224 liwaiPriceTextItemRef.contents = seftFeeTitle
225 liwaiPriceTextItemRef.position = Array(250, 275)
226 liwaiPriceTextItemRef.font = tipFont
227 liwaiPriceTextItemRef.size = 20
228
229 //
230 var liwaiPriceLayerRef = docRef.artLayers.add()
231 liwaiPriceLayerRef.kind = LayerKind.TEXT
232 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
233 liwaiPriceTextItemRef.contents = seftFee
234 liwaiPriceTextItemRef.position = Array(335, 275)
235 liwaiPriceTextItemRef.font = valueFont
236 liwaiPriceTextItemRef.size = 18
237 liwaiPriceTextItemRef.color = priceColor
238
239 //
240 var liwaiPriceLayerRef = docRef.artLayers.add()
241 liwaiPriceLayerRef.kind = LayerKind.TEXT
242 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
243 liwaiPriceTextItemRef.contents = " :"
244 liwaiPriceTextItemRef.position = Array(55, 345)
245 liwaiPriceTextItemRef.font = tipFont
246 liwaiPriceTextItemRef.size = 20
247
248 //
249 var liwaiPriceLayerRef = docRef.artLayers.add()
250 liwaiPriceLayerRef.kind = LayerKind.TEXT
251 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
252 liwaiPriceTextItemRef.contents = size
253 liwaiPriceTextItemRef.position = Array(125, 345)
254 liwaiPriceTextItemRef.font = valueFont
255 liwaiPriceTextItemRef.size = 20
256
257 //
258 var liwaiPriceLayerRef = docRef.artLayers.add()
259 liwaiPriceLayerRef.kind = LayerKind.TEXT
260 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
261 liwaiPriceTextItemRef.contents = " :"
262 liwaiPriceTextItemRef.position = Array(55, 375)
263 liwaiPriceTextItemRef.font = tipFont
264 liwaiPriceTextItemRef.size = 20
265
266 //
267 var liwaiPriceLayerRef = docRef.artLayers.add()
268 liwaiPriceLayerRef.kind = LayerKind.TEXT
269 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
270 liwaiPriceTextItemRef.contents = producingArea
271 liwaiPriceTextItemRef.position = Array(125, 375)
272 liwaiPriceTextItemRef.font = valueFont
273 liwaiPriceTextItemRef.size = 20
274
275 //
276 var liwaiPriceLayerRef = docRef.artLayers.add()
277 liwaiPriceLayerRef.kind = LayerKind.TEXT
278 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
279 liwaiPriceTextItemRef.contents = " :"
280 liwaiPriceTextItemRef.position = Array(55, 405)
281 liwaiPriceTextItemRef.font = tipFont
282 liwaiPriceTextItemRef.size = 20
283
284 //
285 var liwaiPriceLayerRef = docRef.artLayers.add()
286 liwaiPriceLayerRef.kind = LayerKind.TEXT
287 liwaiPriceLayerRef.textItem.kind = TextType.PARAGRAPHTEXT
288 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem
289 liwaiPriceTextItemRef.contents = material
290 liwaiPriceTextItemRef.position = Array(125, 391)
291 liwaiPriceTextItemRef.font = valueFont
292 liwaiPriceTextItemRef.width = 550
293 liwaiPriceTextItemRef.height = 200
294 liwaiPriceTextItemRef.size = 20
295
296 //
297 new Folder("D:/priceCard/result").create ()
298 jpgFile = new File( "D:/priceCard/result/" + products.product[i].elements()[1] + ".jpeg" )
299 jpgSaveOptions = new JPEGSaveOptions()
300 jpgSaveOptions.embedColorProfile = true
301 jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE
302 jpgSaveOptions.matte = MatteType.NONE
303 jpgSaveOptions.quality = 12
304 app.activeDocument.saveAs(jpgFile, jpgSaveOptions, true,
305 Extension.LOWERCASE)
306
307 //
308 docRef.close(SaveOptions.DONOTSAVECHANGES)
309
310 //
311 app.preferences.rulerUnits = originalUnit
312 }
313 // logo
314 logoImg.close(SaveOptions.DONOTSAVECHANGES)
315 alert(" " + productCount + " , \"D:/priceCard/result/\" ")
316 }
コードの中のprice Card Data.xmlのドキュメントのフォーマットは次のようです.<products>
<product>
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
</product>
<product>
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
<!-- -->
< ></ >
</product>
</products>
この文書のフォーマットを見たら、次のような疑問があるはずです.1:博主逗比でしょう.XMLタグは中国語でどう使いますか?
2:productノードを2回書いて何をしますか?手が震えますか
えっと、自分は面白いと知っていますが、開発当初からXMLでデータを保存するのではなく、CVSファイルやPRNファイルを使ってデータソースを保存できるという夢を持っていましたが、失敗に終わってしまいました.商品の説明には何でも保存できるので、萌え編集者は何でも書きます.若いから、何を使ってデータを分割したらいいのか分かりません.
はい、問題1に戻ります.なぜ中国語を使いますか?13を入れないようにして、技術者以外にも見てもらうためです.なぜですか?Excelでこのテンプレートファイルを開けます.Excelはサブノードをフィールドとして名来に表示します.たとえば、
< ></ >
このノードのExcelのタイトルは「製品の二次元コードアドレス」です.これは中国語を使う理由で、分かりやすいです.でも、ここで面白い現象を紹介します.中国語でノードの内容を取りに行くのはいいです.とても驚きました.コードで見られます.通過しました.
title = products.product[i].elements()[0]
商品名の値を取りに来ましたが、実際にはtitle = products.product[i].
商品名の値も取れてかっこいいですよね!でも、問題があるのが心配で、中国語で取りに行きませんでした.問題2を見てください.なぜ2回書いたのですか?これはExcelに聞きます.一つのサブノードだけ書くと、Excelには表頭がないので、二つ書いたら表頭がある表があります.次の通りです.
商品コード
内外コード
価格
5パックの費用
費用を自己負担する
サイズ
産地
材質
製品の写真の住所
製品の二次元コードアドレス
はい、Excelを使って製品情報を記入して、XMlデータファイルに保存します.準備が終わったら、次は奇跡を目撃する時です.
どうやって運行しますか?ページで実行しますか?似てないですね.アプリは何ですか?ブラウザは知っていますか?
実際には、photo Shopで実行されています.作成したスクリプトをAdobe Photoshop CS 5\Presets\Scriptの下に置いて、PSを開いたら、もう開いていたのはPSを再起動します.その後、PS->ファイル->スクリプトの下に入れたスクリプトファイルを発見します.デフォルトはサポートです.実行をクリックすると、レイヤーや文字、ブラシの生成、ブラシのオフ、自動化の感覚がいいですね.コードの中の画像の生成速度は10 sぐらいで、最高画質のものも受け入れられます.
はい、こんなに多くのことを書きました.一つは自分の心得を記録するためです.もう一つは重複性の設計に深くはまり込んでいる人たちに助けを求めています.脚本の知識を少し知っていたら、英語の文書が読めます.とてもかっこいいです.PSスクリプトは私にとって新鮮なものです.もしかしたら私が書いたこれらのおもちゃはとっくに大神さんが私の前に書いたことがあります.しかも効率がもっと高いです.既製のソフトウェアがあれば直接生成できます.もしかしたら、多くの無駄を作ったかもしれません.でも大丈夫です.時には穴ではないので、中に入ってから這い上がるしかないですか?これでやっと回り道ができます.ブログはこれまで、技術大神さんとデザイナーさんがあまり重視しなくてもいいです.この小さいブログは初心者向けの小さい例しかないです.例えば、私はプログラマーとして、二日前にPSがシナリオを実行できることを知らなかったです.私と同じような友達に興味があれば、まず脚本を書いてもいいです.alert自分のハローワールド!ははは~