背景:身在一个有实业的电商公司,设计部的妹子们总是会有做不完的商品图片,当然了,要是做点有技术含量的美化工作也罢,但是最近她们很是无聊,总是要做一些重复性的工作,就比如如题所说的,图片量产,量产什么呢?价格牌。。。这东西很没意思哎!就是给你一个模板,然后你自己把模板原来的文字图片换掉就行了,再排一下版,纯体力劳动好么!博主做过一阵子的对日外包工作,深知她们的痛苦,如果说某些对日外包的程序猿是人肉转码器的话,那么设计部的妹子们现在就成了。。算了,词就不说了,太残酷了
========================================炫炸天的分割线========================================
线索:针对背景交代的情况,BOSS给了我一个提示:PS脚本,顺着这个线索,我就进行了一系列调查,我分别做了@#¥%……&*()的努力,简而言之,photoshop自带的开发文档帮了我大忙,文档位于Adobe Photoshop CS5/Scripting/Documents/,参考了Photoshop CS5 Scripting Guide.pdf和Photoshop CS5 Javascript Ref.pdf,当然了,自带的文档貌似还不能完全满足我的需求,我还自己下载了一个JavaScriptToolsGuide_CS5.pdf,抱着这三个文档啃了又啃,总归算是完成了这样一个量产工具。
========================================酷炸天的分割线========================================
开发思路:既然是量产工具,那么他的工作流程应该是这样的,1工具读了一个文件,文件包含了所有产品的信息,2循环抽取每一个商品的信息,生成图片并保存,3循环完毕,给出一个提示,OK,大概思路就是这样了,然后接下来就是顺着这个思路啃文档了。。。
========================================拽炸天的分割线========================================
代码如下:
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.selection101 selRef.fill( topBarColor, ColorBlendMode.NORMAL, 100, false)102 103 // 定义一个图片组104 var layerSetRef =docRef.layerSets.add()105 layerSetRef.name = "图片组"106 107 //设置logo所在的文档为活动文档108 app.activeDocument = logoImg109 //声明logo图层110 var logoLayer = logoImg.activeLayer111 //复制商品图层到背景文档112 var logoLayerTemp = logoLayer.duplicate(layerSetRef,113 ElementPlacement.PLACEATEND)114 //设置背景文档为活动文档115 app.activeDocument=docRef116 //logo移动至左下角117 logoLayerTemp.translate(-265,225)118 119 //读取当前商品对应的二维码图片120 var qrCodeImg = app.open(File(products.product[i].elements()[9]))121 //设置二维码图片所在的文档为活动文档122 app.activeDocument = qrCodeImg123 //声明二维码图片图层124 var qrCodeImgLayer = qrCodeImg.activeLayer125 //复制二维码图片到背景文档126 var qrCodeImgLayerTemp = qrCodeImgLayer.duplicate(layerSetRef,127 ElementPlacement.PLACEATEND)128 //设置背景文档为活动文档129 app.activeDocument=docRef130 //商品图片移动至中间偏右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 = productImg139 //声明商品图片图层140 var productImgLayer = productImg.activeLayer141 //复制商品图层到背景文档142 var productImgLayerTemp = productImgLayer.duplicate(layerSetRef,143 ElementPlacement.PLACEATEND)144 //设置背景文档为活动文档145 app.activeDocument=docRef146 //商品图片移动至中间偏右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.TEXT157 var proNameTextItemRef = proNameLayerRef.textItem158 proNameTextItemRef.contents = title159 proNameTextItemRef.position = Array(55, 70)160 proNameTextItemRef.font = tipFont161 proNameTextItemRef.size = 30162 163 //里外编码164 var liwaiCodeLayerRef = docRef.artLayers.add()165 liwaiCodeLayerRef.kind = LayerKind.TEXT166 var liwaiCodeTextItemRef = liwaiCodeLayerRef.textItem167 liwaiCodeTextItemRef.contents = liwaiCode168 liwaiCodeTextItemRef.position = Array(55, 95)169 liwaiCodeTextItemRef.font = valueFont170 liwaiCodeTextItemRef.size = 14171 172 //售价标题173 var liwaiCodeLayerRef = docRef.artLayers.add()174 liwaiCodeLayerRef.kind = LayerKind.TEXT175 var liwaiCodeTextItemRef = liwaiCodeLayerRef.textItem176 liwaiCodeTextItemRef.contents = priceTitle177 liwaiCodeTextItemRef.position = Array(55, 135)178 liwaiCodeTextItemRef.font = tipFont179 liwaiCodeTextItemRef.size = 22180 181 //¥182 var sampleLayerRef = docRef.artLayers.add()183 sampleLayerRef.kind = LayerKind.TEXT184 var sampleTextItemRef = sampleLayerRef.textItem185 sampleTextItemRef.contents = sample186 sampleTextItemRef.position = Array(50, 235)187 sampleTextItemRef.font = tipFont188 sampleTextItemRef.size = 40189 sampleTextItemRef.color = priceColor190 191 //金额192 var liwaiPriceLayerRef = docRef.artLayers.add()193 liwaiPriceLayerRef.kind = LayerKind.TEXT194 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem195 liwaiPriceTextItemRef.contents = price196 liwaiPriceTextItemRef.position = Array(105, 235)197 liwaiPriceTextItemRef.font = valueFont198 liwaiPriceTextItemRef.size = 100199 liwaiPriceTextItemRef.color = priceColor200 201 //五包费用202 var liwaiPriceLayerRef = docRef.artLayers.add()203 liwaiPriceLayerRef.kind = LayerKind.TEXT204 var liwaiPriceTextItemRef = liwaiPriceLayerRef.textItem205 liwaiPriceTextItemRef.contents = fiveAssureFeeTitle206 liwaiPriceTextItemRef.position = Array(55, 275)207 liwaiPriceTextItemRef.font = tipFont208 liwaiPriceTextItemRef.size = 20209 210 //五包费用金额211 var liwai
新闻热点
疑难解答