Skip to main content
Known Participant
May 7, 2025
Open for Voting

P: Allow Upscale/Resize Image During Place to match PPI

  • May 7, 2025
  • 3 replies
  • 308 views

I find the General setting "Resize Image During Place" a bit misleading, since in reality it only downscales, and does not upscale in relation to pixel dimensions. I take it the current functionality accounting for PPI is very important to people working on print, but perhaps somewhat useless and even a pain for others, who work solely on digital, etc.

 

Hence, I propose the following improvement:

 

Under "Resize Image During Place" add a sub-setting "Upscale to Match Document PPI" (or "Fill Canvas up to Document PPI", just "Ignore PPI" or whatever is a proper name) that would make the "Resize Image During Place" to ignore PPI and work only with pixel dimensions, thus also upscaling the placed image to fill the Document until it meets either Document borders or its full size in Document's PPI, which ever comes first. This new sub-setting would be enabled only when "Resize Image During Place" is checked, and otherwise disabled.

 

Something like this:

 

Perhaps another option would be to place a button in the top toolbar that is active during Place Image (and enabled when image PPI is higher than Document PPI and pressed-state remembered forever), something like this:

 

P.S. by "upscaling" and "downscaling" I'm referring to document vs. image pixel dimensions (ignoring PPI). Accouting for PPI, I guess those words would be their opposites... But I'm sure you got the point!

 

This setting would tackle the following problem,
which currently happens if you place e.g. 300 PPI Image on a 72 PPI Document, that have identical pixel dimensions:

Currently there are only tedious ways to work around this, such as A) manual transformation of the Image during Place (practically impossible to match 100% size in Document's PPI), B) converting the Image to Document PPI prior to Place, C) probably most popular: skipping the Image Placing altogether and instead opening the image as new Document, copy-pasting it to the previous Document, and manually convert to Smart Object.

 

 

3 replies

D Fosse
Community Expert
Community Expert
February 11, 2026

 

The emphasis in Photoshop is on non-destructive editing. That's a big part of why smart objects were introduced in the first place.

 

I'd be wary of any setting that allows automatic upsampling, which is always highly destructive. Upsampling is last resort and should always be done on a case by case basis. It should be avoided if at all possible.

 

In fact, it’s bad enough that you already get upsampling if you place, say, a 72 ppi image in a 300 ppi master file. 

 

Stephen Marsh
Community Expert
Community Expert
May 7, 2025

I appreciate that this is a feature request "idea", so until Adobe possibly add such a feature, I created a couple of scripts to place at the original pixel size/resolution as one would get with copy/paste.

 

Place Embedded Retaining Pixel Size.jsx

/*
Place Embedded Retaining Pixel Size.jsx
v1.0 - 13th June 2022, Stephen Marsh
v1.1 - 5th April 2024: Added a conditional version check
v1.2 - 5th April 2024: Added a conditional layer bounds vs. canvas check
*/

#target photoshop

function main() {

    // Ensure that version 2021 or later is being used
    var versionNumber = app.version.split(".");
    var versionCheck = parseInt(versionNumber);

    // Fail
    if (versionCheck <= 21) {
        alert("This script is for Photoshop 2021 or later...");

    // Pass
    } else {

        var savedRuler = app.preferences.rulerUnits;
        app.preferences.rulerUnits = Units.PIXELS;

        // Conditionally activate "Skip Transform When Placing" General Preference
        var ref = new ActionReference();
        ref.putEnumerated(charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
        var applicationDesc = executeActionGet(ref);
        var skipTransformPref = applicationDesc.getObjectValue(stringIDToTypeID("generalPreferences")).getBoolean(stringIDToTypeID("skipTransformSOFromLibrary"));
        if (skipTransformPref === false) {
            skipTransform(true);
        }

        // Conditionally deactivate "Resize During Place" General Preference
        var aref = new ActionReference();
        aref.putEnumerated(charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
        var appDesc = executeActionGet(aref);
        var resizePlacePref = appDesc.getObjectValue(stringIDToTypeID("generalPreferences")).getBoolean(stringIDToTypeID("resizePastePlace"));
        if (resizePlacePref === true) {
            resizeDuringPlace(false);
        }

        // Call the place embedded dialog
        placeEmbedded();

        // Set the active layer
        var theSO = app.activeDocument.activeLayer;

        // Reset the SO transform
        var idplacedLayerResetTransforms = stringIDToTypeID("placedLayerResetTransforms");
        executeAction(idplacedLayerResetTransforms, undefined, DialogModes.NO);

        // Get the layer bounds
        var layWidth = app.activeDocument.activeLayer.bounds[2].value - app.activeDocument.activeLayer.bounds[0].value;
        var layHeight = app.activeDocument.activeLayer.bounds[3].value - app.activeDocument.activeLayer.bounds[1].value;

        // Optionally handle oversized content
        if (layWidth > app.activeDocument.width.value || layHeight > app.activeDocument.height.value) {
            if (confirm("Convert Background to layer & reveal all content?", true)) {
                // Select the Background layer if it exists (silently fails if there is no such layer)
                try {
                    app.activeDocument.activeLayer = app.activeDocument.backgroundLayer;
                } catch (error) { }
                // Convert the Background layer to a normal layer
                if (app.activeDocument.activeLayer.isBackgroundLayer) {
                    app.activeDocument.activeLayer.isBackgroundLayer = false;
                    app.activeDocument.activeLayer.name = "Background";
                }
                app.activeDocument.revealAll();
                app.activeDocument.activeLayer = theSO;
            }
        }

        // Reset General Preferences back to their original state
        skipTransform(skipTransformPref);
        resizeDuringPlace(resizePlacePref);

        app.preferences.rulerUnits = savedRuler;
    }
}

app.activeDocument.suspendHistory("Place Embedded Retaining Pixel Size.jsx", "main()");


// Functions

function placeEmbedded() {
    var s2t = function (s) {
        return app.stringIDToTypeID(s);
    };
    var descriptor = new ActionDescriptor();
    var reference = new ActionReference();
    reference.putEnumerated(s2t("menuItemClass"), s2t("menuItemType"), s2t("placeEnum"));
    descriptor.putReference(s2t("null"), reference);
    executeAction(s2t("select"), descriptor, DialogModes.ALL);
}

/*
Preference functions based on:
https://community.adobe.com/t5/photoshop-ecosystem-discussions/how-change-photoshop-preferences-by-script-resize-image-during-place/m-p/12544913
https://community.adobe.com/t5/photoshop-ecosystem-discussions/can-you-also-read-a-photoshop-preference-like-quot-resize-image-during-place-quot/m-p/12752645
*/

function skipTransform(setBoolean) {
    sTT = stringIDToTypeID;
    (ref = new ActionReference()).putProperty(
        sTT("property"),
        (gP = sTT("generalPreferences"))
    );
    ref.putClass(sTT("application"));
    (dsc1 = new ActionDescriptor()).putReference(sTT("null"), ref);
    (dsc2 = new ActionDescriptor()).putBoolean(sTT("skipTransformSOFromLibrary"), setBoolean);
    dsc1.putObject(sTT("to"), gP, dsc2), executeAction(sTT("set"), dsc1);
}

function resizeDuringPlace(setBoolean) {
    sIDtID = stringIDToTypeID;
    (aref = new ActionReference()).putProperty(
        sIDtID("property"),
        (genPref = sIDtID("generalPreferences"))
    );
    aref.putClass(sIDtID("application"));
    (adsc1 = new ActionDescriptor()).putReference(sIDtID("null"), aref);
    (adsc2 = new ActionDescriptor()).putBoolean(sIDtID("resizePastePlace"), setBoolean);
    adsc1.putObject(sIDtID("to"), genPref, adsc2), executeAction(sIDtID("set"), adsc1);
}

 

Place Linked Retaining Pixel Size.jsx

/*
Place Linked Retaining Pixel Size.jsx
v1.0 - 13th June 2022, Stephen Marsh
v1.1 - 5th April 2024: Added a version check
v1.2 - 5th April 2024: Added a conditional layer bounds vs. canvas check
*/

#target photoshop

function main() {

    // Ensure that version 2021 or later is being used
    var versionNumber = app.version.split(".");
    var versionCheck = parseInt(versionNumber);

    // Fail
    if (versionCheck <= 21) {
        alert("This script is for Photoshop 2021 or later...");

        // Pass
    } else {

        var savedRuler = app.preferences.rulerUnits;
        app.preferences.rulerUnits = Units.PIXELS;

        // Conditionally activate "Skip Transform When Placing" General Preference
        var ref = new ActionReference();
        ref.putEnumerated(charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
        var applicationDesc = executeActionGet(ref);
        var skipTransformPref = applicationDesc.getObjectValue(stringIDToTypeID("generalPreferences")).getBoolean(stringIDToTypeID("skipTransformSOFromLibrary"));
        if (skipTransformPref === false) {
            skipTransform(true);
        }

        // Conditionally deactivate "Resize During Place" General Preference
        var aref = new ActionReference();
        aref.putEnumerated(charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
        var appDesc = executeActionGet(aref);
        var resizePlacePref = appDesc.getObjectValue(stringIDToTypeID("generalPreferences")).getBoolean(stringIDToTypeID("resizePastePlace"));
        if (resizePlacePref === true) {
            resizeDuringPlace(false);
        }

        // Call the place linked dialog
        placeLinked();

        // Set the active layer
        var theSO = app.activeDocument.activeLayer;

        // Reset the SO transform
        var idplacedLayerResetTransforms = stringIDToTypeID("placedLayerResetTransforms");
        executeAction(idplacedLayerResetTransforms, undefined, DialogModes.NO);

        // Get the layer bounds
        var layWidth = app.activeDocument.activeLayer.bounds[2].value - app.activeDocument.activeLayer.bounds[0].value;
        var layHeight = app.activeDocument.activeLayer.bounds[3].value - app.activeDocument.activeLayer.bounds[1].value;

        // Optionally handle oversized content
        if (layWidth > app.activeDocument.width.value || layHeight > app.activeDocument.height.value) {
            if (confirm("Convert Background to layer & reveal all content?", true)) {
                // Select the Background layer if it exists (silently fails if there is no such layer)
                try {
                    app.activeDocument.activeLayer = app.activeDocument.backgroundLayer;
                } catch (error) { }
                // Convert the Background layer to a normal layer
                if (app.activeDocument.activeLayer.isBackgroundLayer) {
                    app.activeDocument.activeLayer.isBackgroundLayer = false;
                    app.activeDocument.activeLayer.name = "Background";
                }
                app.activeDocument.revealAll();
                app.activeDocument.activeLayer = theSO;
            }
        }

        // Reset General Preferences back to their original state
        skipTransform(skipTransformPref);
        resizeDuringPlace(resizePlacePref);

        app.preferences.rulerUnits = savedRuler;
    }
}

app.activeDocument.suspendHistory("Place Linked Retaining Pixel Size.jsx", "main()");


// Functions

function placeLinked() {
    function s2t(s) {
        return app.stringIDToTypeID(s);
    }
    var descriptor = new ActionDescriptor();
    descriptor.putBoolean(s2t("linked"), true);
    executeAction(s2t("placeEvent"), descriptor, DialogModes.ALL);
}

/*
Preference functions based on:
https://community.adobe.com/t5/photoshop-ecosystem-discussions/how-change-photoshop-preferences-by-script-resize-image-during-place/m-p/12544913
https://community.adobe.com/t5/photoshop-ecosystem-discussions/can-you-also-read-a-photoshop-preference-like-quot-resize-image-during-place-quot/m-p/12752645
*/

function skipTransform(setBoolean) {
    sTT = stringIDToTypeID;
    (ref = new ActionReference()).putProperty(
        sTT("property"),
        (gP = sTT("generalPreferences"))
    );
    ref.putClass(sTT("application"));
    (dsc1 = new ActionDescriptor()).putReference(sTT("null"), ref);
    (dsc2 = new ActionDescriptor()).putBoolean(sTT("skipTransformSOFromLibrary"), setBoolean);
    dsc1.putObject(sTT("to"), gP, dsc2), executeAction(sTT("set"), dsc1);
}

function resizeDuringPlace(setBoolean) {
    sIDtID = stringIDToTypeID;
    (aref = new ActionReference()).putProperty(
        sIDtID("property"),
        (genPref = sIDtID("generalPreferences"))
    );
    aref.putClass(sIDtID("application"));
    (adsc1 = new ActionDescriptor()).putReference(sIDtID("null"), aref);
    (adsc2 = new ActionDescriptor()).putBoolean(sIDtID("resizePastePlace"), setBoolean);
    adsc1.putObject(sIDtID("to"), genPref, adsc2), executeAction(sIDtID("set"), adsc1);
}

 

  1. Copy the code text to the clipboard
  2. Open a new blank file in a plain-text editor (not in a word processor)
  3. Paste the code in
  4. Save as a plain text format file – .txt
  5. Rename the saved file extension from .txt to .jsx
  6. Install or browse to the .jsx file to run (see below)

https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html

Known Participant
February 11, 2026

this is awesome, thanks for doing adobes job for them. is there any way to make this script the default file handling method when drag and dropping images in, rather than having to find and run the scrip and then find each image file in the file browser every time?

Participant
May 7, 2025

You're right—the current "Resize Image During Place" only downsizes to match the document PPI and doesn't upscale, which can be frustrating for digital workflows. Adding an option like "Upscale to Match Document PPI" or "Ignore PPI" would make it much more flexible, allowing users to maintain consistent scaling whether working for print or digital. This would definitely improve the experience for those who rely on pixel dimensions.