如何使 log.csv 文件在一行中记录 400 个 .jpeg 名称 (Photoshop/JavaScript)
How to make log.csv file to log 400 .jpeg names in one row (Photoshop/JavaScript)
我对 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 中桌面上的文件。
我设法创建了 .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
将脚本的最后部分(即写入文本文件的部分)替换为以下内容:
// 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
文件 是否 存在。
注意:开头的 !
- 这意味着如果检查文件是否存在 returns false
.
第一次脚本是 运行 检查将 return false
并且 .txt
文件使用 "w"
参数 - 这意味着 write.
这次我们在第一行写headerSKU
和Date
,在第二行写第一个处理的文件名
当脚本再次运行时
if (!fileOut.exists) { ... }
检查 returns true
因为文件已经存在。这次使用 "a"
参数打开 .txt
文件,(这意味着 append),处理的文件名写在新的一行上文件结尾。
备注
.txt
文件通常与 TextEdit 应用程序关联。 TextEdit 不会在文件打开时动态显示对文件内容所做的任何更新。您可能会发现需要关闭 .txt
文件并再次打开它才能看到添加到文件内容中的最新文件名。
- 上面的示例使用
writeln
而不是 write
,因此尾部的 \r
不是必需的。
我对 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 中桌面上的文件。
我设法创建了 .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
将脚本的最后部分(即写入文本文件的部分)替换为以下内容:
// 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
文件 是否 存在。注意:开头的
!
- 这意味着如果检查文件是否存在 returnsfalse
.第一次脚本是 运行 检查将 return
false
并且.txt
文件使用"w"
参数 - 这意味着 write.这次我们在第一行写header
SKU
和Date
,在第二行写第一个处理的文件名当脚本再次运行时
if (!fileOut.exists) { ... }
检查 returns
true
因为文件已经存在。这次使用"a"
参数打开.txt
文件,(这意味着 append),处理的文件名写在新的一行上文件结尾。
备注
.txt
文件通常与 TextEdit 应用程序关联。 TextEdit 不会在文件打开时动态显示对文件内容所做的任何更新。您可能会发现需要关闭.txt
文件并再次打开它才能看到添加到文件内容中的最新文件名。- 上面的示例使用
writeln
而不是write
,因此尾部的\r
不是必需的。