Copy link to clipboard
Copied
Hi there, I posted earlier asking why "export for web - legacy" was not maintaining my proper canvas size and image size. (previous post: https://community.adobe.com/t5/photoshop/can-t-change-image-size-when-exporting-in-save-to-web/td-p/...)
I learned that this process has a limitation of 8192 pixels H or W - so people recommend using export > save as jpeg... The problem is, the purpose of what I'm doing is I am creating a multi-image instagram carousel. So I have spliced my canvas into 9 sections (1080 x 9 = 9720). It allows me to export for web lecagy but it decreases my image size thereby reducing the image quality. So when I tried export > save as jpeg, it didn't retain the splices. I need it to result in 9 different jpegs. Does anyone know a workaround for this?
Something like this? The code below has been adjusted to default to 9 columns x 1 row.
Yes, it saves to PNG, however, it is easy enough to change the code to save to JPEG, but it would be good to know what JPEG settings. Perhaps show via screenshot what you would use in either save as copy or save for web legacy.
https://www.andrewnoske.com/wiki/Adobe_Photoshop_-_Scripts_Related_to_Montaging
// Takes the currently opened image, and allows the user to split it into
// a grid of PNG tiles,
...
Copy link to clipboard
Copied
Something like this? The code below has been adjusted to default to 9 columns x 1 row.
Yes, it saves to PNG, however, it is easy enough to change the code to save to JPEG, but it would be good to know what JPEG settings. Perhaps show via screenshot what you would use in either save as copy or save for web legacy.
https://www.andrewnoske.com/wiki/Adobe_Photoshop_-_Scripts_Related_to_Montaging
// Takes the currently opened image, and allows the user to split it into
// a grid of PNG tiles, by specifying an number of columns and rows and a
// base file prefix.
//
// Tiles are created by duplicating the original image, cropping then saving.
// Tiles are saved in the form: 'C:/path/prefix0,0.png'
#target photoshop
if (documents.length != 1) {
alert("Must open exactly one image in photoshop first");
} else {
// Prompt user for number of columns and rows:
var cols = parseInt(prompt("How many columns?", 9));
var rows = parseInt(prompt("How many rows?", 1));
var total = cols*rows;
// Determine target tile size:
var image = app.documents[0];
var tileWidth = image.width / cols;
var tileHeight = image.height / rows;
// Draw guides along cuts:
for(col = 0; col <= cols; col++) {
image.guides.add(Direction.VERTICAL, col * tileWidth);
}
for(row = 0; row <= rows; row++) {
image.guides.add(Direction.HORIZONTAL, row * tileHeight);
}
// Prompt user to confirm, and for file prefix to save out to:
var savePath = File.saveDialog("Save Image File Prefix", "");
if(!savePath) {alert("Cancelled"); exit;}
if(!confirm("Create " + total + " tiles, each of " +
tileWidth + " x " + tileHeight + "?\n\n\n" +
"Tiles will be saved as '" + savePath.fsName +
"1,1.png' '...1,2.png' etc")) { exit; }
// For each tile:
for(row = 0; row < rows; row++) {
for(col = 0; col < cols; col++) {
// Determine crop coordinates (in pixels):
var top = row * tileHeight;
var bottom = top + tileHeight;
var left = col * tileWidth;
var right = left + tileWidth;
// Duplicate image, crop, save as PNG and close:
var tile = image.duplicate(); // Duplicate file.
cropCurrentDocument(top, left, bottom, right);
saveTileAsPng(tile, savePath.fsName, col, row);
tile.close(SaveOptions.DONOTSAVECHANGES);
}
}
}
function saveTileAsPng(img, origFilePath, col, row) {
var newFilePath = origFilePath + "_" + col + "," + row + ".png";
var newFile = new File(newFilePath);
var pngSaveOptions = new PNGSaveOptions();
activeDocument.saveAs(newFile, pngSaveOptions, true, Extension.LOWERCASE);
}
// Crops active document by a rectangle with the given pixel coordinages.
function cropCurrentDocument(top, left, bottom, right){
app.preferences.rulerUnits = Units.PIXELS;
activeDocument.selection.select(
[[left, top], [right, top], [right, bottom], [left, bottom]],
SelectionType.REPLACE, 0, false);
executeAction(charIDToTypeID( "Crop" ), new ActionDescriptor(),
DialogModes.NO );
}
https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Is this seriously supposed to be a solution? I want to make one more pannel in my instagram carrousel and now I have to learn how to script in PS?...
Copy link to clipboard
Copied
Is this seriously supposed to be a solution? I want to make one more pannel in my instagram carrousel and now I have to learn how to script in PS?...
By @Brittow
No, all you have to do is learn to run a custom script. There is a big difference.
You could simply manually crop the image into separate panels if you are not looking for automation.
Copy link to clipboard
Copied
Well yes, manually slicing the image is not the issue though, just the exporting.
Copy link to clipboard
Copied
Slicing isn't the answer if you keep the canvas larger than 8192px, that's why I specifically used the term crop and not slice.
Copy link to clipboard
Copied
It worked but it completed change the colors.
Copy link to clipboard
Copied
It worked but it completed change the colors.
By @Brittow
There is nothing in the code to change colours, however, it doesn't explicitly include an ICC profile in the PNG save options.
Is your image sRGB?
What version of Photoshop are you running?
There are other options, the following script can create the slices as layers, then you can use Export As or the Export Layers to Files script that comes with Photoshop:
Copy link to clipboard
Copied
The images are in ProPhoto RGB
The version is 22.4.3
I'll check this script. Thanks
Copy link to clipboard
Copied
I converted the color space from PhoPhoto to sRGB and it seemed to solve the color shift issue when exporting with the script.
Is there a way to make it export as JPG and choose the export options such as quality and to include ICC profile?
Copy link to clipboard
Copied
I converted the color space from PhoPhoto to sRGB and it seemed to solve the color shift issue when exporting with the script.
Yes, colour management 101.
Is there a way to make it export as JPG and choose the export options such as quality and to include ICC profile?
By @Brittow
Yes, I'll change the code when I have time. If you are in a hurry, you can simply use Image Processor to convert the PSD to JPEG.
Copy link to clipboard
Copied
@Brittow – Here is a version of the script posted above to save to JPEG quality level 10 including ICC profile:
// Takes the currently opened image, and allows the user to split it into
// a grid of PNG tiles, by specifying an number of columns and rows and a
// base file prefix.
//
// Tiles are created by duplicating the original image, cropping then saving.
// Tiles are saved in the form: 'C:/path/prefix0,0.jpg'
/*
Modified to save JPEG versions:
https://community.adobe.com/t5/photoshop-ecosystem-discussions/save-for-web-legacy-limitation-workaround-for-instagram-carousel/m-p/13801386
v1.0 - 19th May 2023, initial changes made from PNG to JPEG
v1.1 - 28th June 2024, minor changes for extensions from .png to .jpg
*/
#target photoshop
if (documents.length != 1) {
alert("Must open exactly one image in photoshop first");
} else {
// Prompt user for number of columns and rows:
var cols = parseInt(prompt("How many columns?", 9));
var rows = parseInt(prompt("How many rows?", 1));
var total = cols*rows;
// Determine target tile size:
var image = app.documents[0];
var tileWidth = image.width / cols;
var tileHeight = image.height / rows;
// Draw guides along cuts:
for(col = 0; col <= cols; col++) {
image.guides.add(Direction.VERTICAL, col * tileWidth);
}
for(row = 0; row <= rows; row++) {
image.guides.add(Direction.HORIZONTAL, row * tileHeight);
}
// Prompt user to confirm, and for file prefix to save out to:
var savePath = File.saveDialog("Save Image File Prefix", "");
if(!savePath) {alert("Cancelled"); exit;}
if(!confirm("Create " + total + " tiles, each of " +
tileWidth + " x " + tileHeight + "?\n\n\n" +
"Tiles will be saved as '" + savePath.fsName +
"1,1.jpg' '...1,2.jpg' etc")) { exit; }
// For each tile:
for(row = 0; row < rows; row++) {
for(col = 0; col < cols; col++) {
// Determine crop coordinates (in pixels):
var top = row * tileHeight;
var bottom = top + tileHeight;
var left = col * tileWidth;
var right = left + tileWidth;
// Duplicate image, crop, save as PNG and close:
var tile = image.duplicate(); // Duplicate file.
cropCurrentDocument(top, left, bottom, right);
saveTileAsJPEG(tile, savePath.fsName, col, row);
tile.close(SaveOptions.DONOTSAVECHANGES);
}
}
}
function saveTileAsJPEG(img, origFilePath, col, row) {
var newFilePath = origFilePath + "_" + col + "," + row + ".jpg";
var newFile = new File(newFilePath);
var jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
jpgSaveOptions.embedColorProfile = true;
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = 10;
activeDocument.saveAs(newFile, jpgSaveOptions, true, Extension.LOWERCASE);
}
// Crops active document by a rectangle with the given pixel coordinages.
function cropCurrentDocument(top, left, bottom, right){
app.preferences.rulerUnits = Units.PIXELS;
activeDocument.selection.select(
[[left, top], [right, top], [right, bottom], [left, bottom]],
SelectionType.REPLACE, 0, false);
executeAction(charIDToTypeID( "Crop" ), new ActionDescriptor(),
DialogModes.NO );
}
Copy link to clipboard
Copied
hello!
great script. I wondered if there was a way to have this same outcome, but instead of starting of of a already flatened and exporte PNG, I could run it directly from the original PSD file I'm working on (thinking about simplifying the workflow).
I actually did try to run it directly from the PSD but it resulted in HUGE jpgs, i don't understand why.
Running from the the flat PNG results in ~200kb slices, but running from PSD results in 40mb slices.
I tried to flat the PSD before running and the output is the same...
thanks
Copy link to clipboard
Copied
I actually did try to run it directly from the PSD but it resulted in HUGE jpgs, i don't understand why.
Running from the the flat PNG results in ~200kb slices, but running from PSD results in 40mb slices.
I tried to flat the PSD before running and the output is the same...
thanks
By @ju.sting
How did you save the JPEG or PNG files?
Did you use Save As/Save a Copy... Or did you use Export As or Save for Web (Legacy)?
In the PSD file, go to File > File Info, then the Raw Data tab. Do you see a message that there is too much metadata to display? More here:
https://prepression.blogspot.com/2017/06/metadata-bloat-photoshopdocumentancestors.html