我还是JavaScript新手。但是以某种方式设法创建了以下脚本。通常,我运行此脚本以批处理400-500张图像。它会在进行某些特定的图像压缩的同时,在2个不同的位置创建并保存2张图像副本。
//Script should be used only in Adobe Photoshop
//This script will: 1. Check if canvas is 1:1, if not then scale to the correct ratio (3000px x 3000px)
// 2. Check whether it has ColorProfile embedded. If not then change collor profile to sRGB.
// 3. Save the resized TIFF version (100% Quality, 3000px x 3000px, sRGB, LZW compressed, Without layers) into "/Volumes/Hams Hall Workspace/Ecom_Staging/Images_Today"
// 4. Save another copy as JPEG (80% Quality, 2000px x 2000px, sRGB) "into /Volumes/Hams Hall Workspace/Ecom_Staging/Jpegs_for_Hybris"
if( BridgeTalk.appName == "photoshop" ) {
//continue executing script
}
// create the output file
// first figure out which kind of line feeds we need
if ($.os.search(/windows/i) != -1) {
fileLineFeed = "Windows"
}
else {
fileLineFeed = "Macintosh"
}
//output location
folderHybrisUpload = "/Jpegs_for_Hybris";
folderTiffSave = "/Images_Today";
folderDumpRoot = "/Volumes/Hams Hall Workspace/Ecom_Staging";
folderName = "~/Desktop/"
// Sizes
var hybrisSize=2000;
var hybrisQuality=80;
var docRef = activeDocument;
//History States
app.purge(PurgeTarget.HISTORYCACHES);
var history = docRef.historyStates.length - 1;
//Units Pixels
app.preferences.rulerUnits = Units.PIXELS;
//Make it 1:1 Ratio (Square)
if (docRef.height != docRef.width) {
docRef.changeMode(ChangeMode.RGB);
// these are our values for the END RESULT width and height (in pixels) of our image
var fWidth = 3000;
var fHeight = 3000;
// do the resizing. if height > width (portrait-mode) resize based on height. otherwise, resize based on width
if (docRef.height > docRef.width) {
docRef.resizeImage(null, UnitValue(fHeight, "px"), null, ResampleMethod.BICUBIC);
} else {
docRef.resizeImage(UnitValue(fWidth, "px"), null, null, ResampleMethod.BICUBIC);
}
// Makes background white
var white = new SolidColor();
white.rgb.hexValue = "FFFFFF";
app.backgroundColor = white;
// Resize Canvas
app.activeDocument.resizeCanvas(UnitValue(fWidth, "px"), UnitValue(fHeight, "px"));
var history = docRef.historyStates.length - 1;
}
//Correct .jpeg extension when saving for Hybris
var fileNameNoExtension = docRef.name;
fileNameNoExtension = fileNameNoExtension.split(".");
var fileExtension= fileNameNoExtension[1];
if (fileNameNoExtension.length > 1) {
fileNameNoExtension.length--;
}
fileNameNoExtension = fileNameNoExtension.join(".");
fileNameType = fileNameNoExtension.split("_");
var finalUnderScorePosition = fileNameNoExtension.lastIndexOf("_");
varFileName = "";
for (var a = 0; a < finalUnderScorePosition; a++) {
varFileName += fileNameNoExtension.charAt(a)
}
varFileType = "";
for (var a = finalUnderScorePosition + 1; a < fileNameNoExtension.length; a++) {
varFileType += fileNameNoExtension.charAt(a)
}
//Save File into Hybris Folder
app.activeDocument.resizeImage(hybrisSize, undefined, undefined, ResampleMethod.BICUBICSHARPER);
saveFile = File(folderDumpRoot + folderHybrisUpload + "/" + varFileName + "_"+varFileType+".jpg")
SaveJPEG(hybrisQuality,saveFile);
docRef.activeHistoryState = docRef.historyStates[history];
//Save copy of an "Original" into Tiff Folder (Images_Today)
app.activeDocument.save();
var saveTIFF = new TiffSaveOptions();
saveTIFF.layers = false;
saveTIFF.imageCompression = TIFFEncoding.TIFFLZW;
app.activeDocument.saveAs(new File(folderDumpRoot + folderTiffSave + "/" + docRef.name), saveTIFF);
//JPEG Compression Settings
function SaveJPEG(quality,saveFile) {
var exportOptionsSaveForWeb = new ExportOptionsSaveForWeb();
exportOptionsSaveForWeb.format = SaveDocumentType.JPEG;
exportOptionsSaveForWeb.includeProfile = false;
exportOptionsSaveForWeb.interlaced = true;
exportOptionsSaveForWeb.optimized = true;
exportOptionsSaveForWeb.includeProfile = false;
exportOptionsSaveForWeb.quality = quality;
activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, exportOptionsSaveForWeb);
}
// Create the log file
var fileOut = new File(folderName+"time_test.txt");
// Use OS specific linefeeds
fileOut.lineFeed = fileLineFeed;
// open the file for writing
fileOut.open("w", "TEXT", "????");
// Write a line to .log file
// use commas as delimiters if you want to open the file in Excel
// use "/r" to add carriage returns
fileOut.writeln("SKU, Date");
// Write another line to .log file
// var TodaysDate = new Date();
fileOut.write(varFileName + "_"+varFileType+".jpg\r");
// stop writing to the file
fileOut.close();
// Open the file in it's associated application
// .log files are associated with the "Console" on OS X
fileOut.execute();
//Close
app.activeDocument.close();
接下来,我要记录已成功保存在一行中的“ / Volumes / Hams Hall Workspace / Ecom_Staging / Jpegs_for_Hybris”中并保存在桌面。
我设法创建了.csv日志文件,该文件将图像名称(“ SKU”)记录到桌面上的该.csv文件中。
// Create the log file
var fileOut = new File(folderName+"time_test.txt");
// open the file for writing
fileOut.open("w", "TEXT", "????");
// Write a line to .log file
// use commas as delimiters if you want to open the file in Excel
// use "/r" to add carriage returns
fileOut.writeln("SKU, Date");
// Write another line to .log file
// var TodaysDate = new Date();
fileOut.write(varFileName + "_"+varFileType+".jpg\r");
// stop writing to the file
fileOut.close();
// Open the file in it's associated application
// .log files are associated with the "Console" on OS X
fileOut.execute();
但是问题在于,脚本处理的每个新图像都只是重新创建相同的.csv文件。 .csv文件中显示的只是图像名称的一行。
我尝试过在线搜索一些答案,但是给出的唯一答案是如何创建基本日志文件。或来自多个不同名称的图层的日志文件。
我还尝试创建一些条件,如果已经创建了日志,请不要创建新的条件,而要使用现有的并简单地使用writeln(filename)或“ \ r” + filename \ r。但它只是忽略它,并继续创建新文件。
任何建议将不胜感激。
Problem with the current log.csv that it shows only 1 line of image name
答案 0 :(得分:1)
用以下内容代替脚本的最后部分(即您写入文本文件的部分):
// Create the log file
var fileOut = new File(folderName+"time_test.txt");
// Check if the file already exists.
if (!fileOut.exists) {
fileOut.open("w");
fileOut.writeln("SKU, Date");
fileOut.writeln(varFileName + "_"+varFileType+".jpg");
} else {
fileOut.open("a");
fileOut.writeln(varFileName + "_"+varFileType+".jpg");
}
// stop writing to the file
fileOut.close();
// Open the file in it's associated application
// .log files are associated with the "Console" on OS X
fileOut.execute();
说明
您需要首先通过以下行检查.txt
文件是否已存在:
if (!fileOut.exists) { ... }
这只是检查.txt
文件是否不存在。
注意:!
开头-表示对文件是否存在的检查是否返回false
。
首次运行脚本时,检查将返回false
,并使用.txt
参数打开"w"
文件-这表示 write 。
这次,我们在第一行中写头文件SKU
和Date
,在第二行中写上处理的第一个文件的名称。
再次运行脚本时,
if (!fileOut.exists) { ... }
check返回true
,因为该文件已经存在。这次使用.txt
参数打开了"a"
文件(这表示 append ),并且处理的文件名写在新行的末尾。文件。
注释
.txt
文件通常与 TextEdit 应用程序相关联。 TextEdit 在打开文件时不会动态显示对文件内容的任何更新。您可能会发现需要关闭.txt
文件,然后再次打开以查看添加到文件内容中的最新文件名。writeln
而不是write
,因此结尾的\r
不是必需的。