/***************************************************************** * * 此脚本fork自@梁进刚 【给汉化者们分享几个小工具】 * https://tieba.baidu.com/p/3020902369 * [发布于2014-05-03 20:09] * 注意:对文本有要求,正文必须以一个空行开始,一个空行结束,两个段落之间由空行隔开。 * ***************************************************************** * * 我的修改: * 1、将选项写死在脚本内免得乱弹对话框 * 2、改进函数 * 3、增加注释 * 4、写了一堆配套脚本,包括AHK和VBA * 5、确认了Photoshop脚本体系bug很多这个事实 * 6、经IntelliJ IDEA提醒,改用"===",即全等于,进行判断 * ————墨问非名 * [大致从2016年写到2018年] * ***************************************************************** * * 暗的修改: * 1、增加自定义选项 * [2017年] * ***************************************************************** * * 备注: * 1、建议放置在"C:\Program Files\Adobe\Adobe Photoshop CC 2018\Presets\Scripts" * 2、有些变量不能通过函数传递 * 3、PS脚本不认let关键字定义变量 * 4、不懂再问 * ————墨问非名 * *****************************************************************/ //================初始化标尺、字体单位设置================ var originalUnit = preferences.rulerUnits; preferences.rulerUnits = Units.PIXELS; var originalTypeUnit = preferences.typeUnits; preferences.typeUnits = TypeUnits.POINTS; //================将文本写入数组的函数================ function text2array(read_method) { //================输入文本文档================ if (read_method === '对话框选取') { var myTextFile = File.openDialog("打开文件..."); } else if (read_method === '读取特定文档') { //在Windows下,路径也必须都用“/” //虚拟机:"//psf/Host/Volumes/Mack/-.txt" //Win:"//Mac/Dropbox/Test.txt" //Mac:"/Users/alicewish/Dropbox/Test.txt" var text_path = "//Mac/Dropbox/Test.txt"; var myTextFile = new File(text_path); } //================读取文本文档到数组================ myTextFile.open("r"); var myLineArray = []; while (!myTextFile.eof) { myLineArray.push(myTextFile.readln()); } myTextFile.close(); return myLineArray } //================将文本写入图层的函数================ function writeOnLayerS(n, row_len, myLineArray, emptrow) { var contents = ''; if (row_len === 1) { contents = myLineArray[emptrow[n] + 1]; } else if (row_len > 1) { contents = myLineArray[emptrow[n] + 1]; for (var j = 1; j < row_len; j++) { contents += '\r' + myLineArray[emptrow[n] + j + 1]//'\r'是return,相当于换行 } } return contents } function main_process(read_method) { myLineArray = text2array(read_method);//myLineArray是包含每行文本的数组 //================读取所有空行所在行数================ //================尝试写为单独函数但未通过调试================ var emptrow = []; var i = 0; for (var lineIndex = 0; lineIndex < myLineArray.length; lineIndex++) { if (myLineArray[lineIndex] === "") { emptrow[i] = lineIndex; i++; } } emptrow[i] = myLineArray.length;//最后加上总行数 //================文本图层变量设置================ var docRef = app.activeDocument;//当前打开的文档 var fontName = "MicrosoftYaHei";// 定义字体:微软雅黑 var textColor = new SolidColor();//定义字体颜色:美漫黑=R33 G33 B33 textColor.rgb.red = 33; textColor.rgb.green = 33; textColor.rgb.blue = 33; //读取文档宽度与高度 var width = docRef.width; var height = docRef.height; var row_len = 0; for (var n = 0; n < i; n++) { row_len = emptrow[n + 1] - emptrow[n] - 1;//计算每个段落包含的行数 var artLayerRef = docRef.artLayers.add();//添加图层 artLayerRef.kind = LayerKind.TEXT;//转为文本图层 var textItemRef = artLayerRef.textItem; /******************** * 左对齐=LEFT * 右对齐=RIGHT * 居中对齐=CENTER ********************/ textItemRef.justification = Justification.CENTER; //对齐方式 /******************** * 犀利=CRISP * 无=NONE * 锐利=SHARP * 平滑=SMOOTH * 浑厚=STRONG ********************/ textItemRef.antiAliasMethod = AntiAlias.STRONG; //消除锯齿方式 /******************** * 手动指定=MANUAL * 度量标准=METRICS * 视觉=OPTICAL(推荐这个,字距更为紧凑) ********************/ textItemRef.autoKerning = AutoKernType.OPTICAL; //字符间距微调 textItemRef.color = textColor;//字体颜色 textItemRef.size = 30; //字号 textItemRef.font = fontName; textItemRef.position = Array(width * 0.1 + n * (width / (i + 1)), height * 0.1 + n * (height / (i + 1)));//位置 textItemRef.contents = writeOnLayerS(n, row_len, myLineArray, emptrow);//写入图层 } //================清空变量================ myLineArray = null; i = null; n = null; row_len = null; emptrow = null; docRef = null; textColor = null; newTextLayer = null; } //================设置区域================ // var read_method = '对话框选取'; var read_method = '读取特定文档'; //================启动程序================ main_process(read_method);