Copy link to clipboard
Copied
I'm currently tasked with reformatting 3,000 product images (thumbnail, normal, and large sizes for each) for a new online store. To do that, I'm trying to create a Photoshop (CS6) action that can automate the process as much as possible because I have a hard deadline and not a lot of time to get it all done. Where I'm running into issues is scaling the images automatically once I've used File-->Place. My canvas sizes are all square (670px X 670px, 250px X 250px, and 125px X 125px), but the product images I'm placing on the canvases are almost always rectangular with the height greater than the width at about a 2:3 ratio. I need to scale them so that the image is touching the top and bottom edges of the canvas and the width is adjusted accordingly with the image centered horizontally.
I found the program below on another thread, but it's not working exactly like I need it to. It mentions "maintain aspect ratio," but when I run it, the image I'm trying to place ends up getting stretched to fill the entire canvas rather than the width adjusting to the height once the height has reached its maximum. I have no experience with JavaScript, so I'm having a difficult time adjusting the code to meet my needs. Any help would be greatly appreciated since I am a writer who is WAY out of his comfort zone.
- var maintainAspectRatio;// set to true to keep aspect ratio
- if(app.documents.length>0){
- app.activeDocument.suspendHistory ('Fit Layer to Canvas', 'FitLayerToCanvas('+maintainAspectRatio+')');
- }
- function FitLayerToCanvas( keepAspect ){// keepAspect:Boolean - optional. Default to false
- var doc = app.activeDocument;
- var layer = doc.activeLayer;
- // do nothing if layer is background or locked
- if(layer.isBackgroundLayer || layer.allLocked || layer.pixelsLocked
- || layer.positionLocked || layer.transparentPixelsLocked ) return;
- // do nothing if layer is not normal artLayer or Smart Object
- if( layer.kind != LayerKind.NORMAL && layer.kind != LayerKind.SMARTOBJECT) return;
- // store the ruler
- var defaultRulerUnits = app.preferences.rulerUnits;
- app.preferences.rulerUnits = Units.PIXELS;
- var width = doc.width.as('px');
- var height =doc.height.as('px');
- var bounds = app.activeDocument.activeLayer.bounds;
- var layerWidth = bounds[2].as('px')-bounds[0].as('px');
- var layerHeight = bounds[3].as('px')-bounds[1].as('px');
- // move the layer so top left corner matches canvas top left corner
- layer.translate(new UnitValue(0-layer.bounds[0].as('px'),'px'), new UnitValue(0-layer.bounds[1].as('px'),'px'));
- if( !keepAspect ){
- // scale the layer to match canvas
- layer.resize( (width/layerWidth)*100,(height/layerHeight)*100,AnchorPosition.TOPLEFT);
- }else{
- var layerRatio = layerWidth / layerHeight;
- var newWidth = width;
- var newHeight = ((1.0 * width) / layerRatio);
- if (newHeight >= height) {
- newWidth = layerRatio * height;
- newHeight = height;
- }
- var resizePercent = newWidth/layerWidth*100;
- app.activeDocument.activeLayer.resize(resizePercent,resizePercent,AnchorPosition.TOPLEFT);
- }
- // restore the ruler
- app.preferences.rulerUnits = defaultRulerUnits;
- }
Hum Im not sure Im getting you here… Have you looked at Image Processor…?
Why are you NOT just using Fit Image and canvas size in your actions…?
These are all built-in to Photoshop.
If you wanted to do all 3 sizes in the 1 fly-bye then use script to process…
If you need extra file naming conventions then script would probably be best…
All of the above should have NO trouble handling your 3k files…
Copy link to clipboard
Copied
Hum Im not sure Im getting you here… Have you looked at Image Processor…?
Why are you NOT just using Fit Image and canvas size in your actions…?
These are all built-in to Photoshop.
If you wanted to do all 3 sizes in the 1 fly-bye then use script to process…
If you need extra file naming conventions then script would probably be best…
All of the above should have NO trouble handling your 3k files…
Copy link to clipboard
Copied
Apparently, I just like to do things the difficult way. Everything I found searching made it sound like you needed to write a script to accomplish what I wanted to do. Thanks!