第二編: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 //    :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自分のハローワールド!ははは~