Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
2

Photo Blow-up Question

Explorer ,
Feb 11, 2024 Feb 11, 2024

Hi everyone! I have a quick question about the limitations of a photo blow-up for a poster. I can't share screenshots since the content is proprietary, but I will do my best to describe:

 

1. Boss wants an 5.5" x 8.5" photo to be blown up for a poster that is at least 30" on one side

The specs for the file I was given are: 1650 px x 2550 px (5.5" x 8.5"), Resolution is 300 and file size is 12M

 

2. I didn't think that would work because that's over double the size of the original so my assumption would be that the image would start to pixelate.

 

3. In Photoshop, I resized the image to be 30" on the long side and the new specs are:

Image size: 200M

Width: 12.413"

Height: 30"

Resolution 300

 

4. The image looks great when I open it and the resolution seems optimal based on that image size box.

 

My question is: would this actually print correctly if we send it to the printer? How is that resolution staying so stable and why is there no pixelation if it has been blown up to over twice its size? 

 

Thank you! I hope this isn't an overly basic question, I am just trying to understand as much as I can about image size/resolution/dimension 

TOPICS
macOS
2.7K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 2 Correct answers

Community Expert , Feb 12, 2024 Feb 12, 2024

@davescm 

 

Putting that formula into a basic script:

 

2024-02-13_11-42-34.png2024-02-13_11-42-40.png

 

 

/*
Print Resolution Calculator Viewing Distance - Feet.jsx
Formula from @davescm
v1.0 - 13th February 2024, Stephen Marsh
v1.1 - 14th February 2024, Added canvas size to the alert
https://community.adobe.com/t5/photoshop-ecosystem-discussions/photo-blow-up-question/td-p/14416674
https://community.adobe.com/t5/photoshop-ecosystem-discussions/quick-question-how-to-you-tackle-image-size-regarding-printing-projects-distance-dpi/m-p/1327375
...
Translate
Community Expert , May 05, 2025 May 05, 2025

A new version, combining the separate metric and imperial scripts into one script with a GUI, adding a scale factor field.

 

P.S. Just in case I broke something, I welcome testing and feedback, thanks.

 

EDIT: v1.3 Update, 21st August 2025

 

Poster_Viewing_Distance_Resolution_Calculator_v1-2.png

 

/*

Poster Viewing Distance Resolution Calculator v1-3.jsx
Stephen Marsh
v1.0 - 13th February 2024: Initial release
v1.1 - 14th February 2024: Added canvas size to the alert
v1.2 - 6th May 2025: Combined the separate metric and imperial scripts into a sin
...
Translate
Adobe
Community Expert ,
Feb 11, 2024 Feb 11, 2024

Note that the Resample box is checked. With this, Photoshop adds or removes pixels what an image is resized, setting the pixel dimensions based on the print dimensions and resolution.

 

When the Resample box is not checked, the resolution is set based on the pixel dimensions and the print dimensions.

 

There are several resampling methods available. Automatic is a good general purpose one, but they all have their uses.

 

It's a good idea to discuss this with the printer you use, as they can recommend what would work best on their press.

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Feb 14, 2024 Feb 14, 2024

Thank you for your answer!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 11, 2024 Feb 11, 2024

You may not need 300 PPI, it depends on viewing distance/conditions and the variables of the printing method.

 

Without resampling, you would only have an effective resolution of 85 PPI for 30 inches on the longest edge... So some resampling is probably required to avoid visible pixels.

 

The final image quality will depend on the source image content/quality and the resizing interpolation method used.

 

When you say it "looks great", what viewing % are you evaluating this at?

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Feb 14, 2024 Feb 14, 2024

Thank you for your answer! I was just viewing it on my Mac desktop, so probably not a great assessment I am guessing

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Feb 12, 2024 Feb 12, 2024

Posters can be printed in the 90-150ppi range and usually look pretty good. Photoshop has some built-in upsampling (in the Camera RAW module, and there is a neural upsampling filter) and there are numerous third-party solutions. I'd just try it in PS and see how it looks.

The printer should have a wide-format printer. Ask if they have a printer profile (to help with color matching.)

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Feb 14, 2024 Feb 14, 2024

Thank you! I will definitely ask my printer

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 12, 2024 Feb 12, 2024

The above is entirely right. You do not need 300 ppi for large format printing. The bigger it is, the farther away it will be seen from, so the optical resolution stays the same. The eye wants to take in the whole image. You won't stick your nose into it.

 

Just for demonstration, look at a traditional monitor at 95-120 ppi. How close do you need to go before you see pixels? That's right, very close. For a wall-sized banner, as low as 15 - 20 ppi may be good enough.

 

300 ppi is for books and magazines to be seen at arm's length or less. Even so, there's nothing magical about the 300 number. It's not even a sharpness limit - it's a smoothness limit. With a standard halftone screen at 150 lines per inch, 300 pixels per inch is the theoretical upper limit beyond which no individual pixels can be detected. But it can still be eminently sharp at lower ppi.

 

ppi3b.jpg

ppi2.png

 

 

All that said. 2250 x 1650 pixels is a small file to begin with. That sets limits to reproduction size under any circumstances. At 30", you will end at 75 ppi. While not disastrously low, it's still not very good.

 

Generally, all resampling disrupts the pixel structure and degrades the image. This is especially true for jpegs, which will never look good upsampled. In most normal circumstances, the image will look best as-is, without any upsampling. But sometimes you have to, to avoid visible pixels.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Feb 14, 2024 Feb 14, 2024

This is so helpful, thank you for taking the time to explain these concepts!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 12, 2024 Feb 12, 2024

'I am just trying to understand as much as I can about image size/resolution/dimension'

 

Resizing can be done two ways.
First without resampling. So your 8.5" x 5.5"  300ppi image becomes 30" x 19.4" 85ppi. Overall it has the same number of pixels 2550x1650 =4.2 million pixels and the image is unchanged.  If it is viewed from a greater distance so that it takes up the same field of view as the original viewed closer then the two will look identical. Only if you move closer will you see the pixel structure.

Second with resampling. If you resize and resample to 300ppi then your 8.5 x 5.5 300ppi image now becomes a 30" x 19.4" image at 300ppi and measures 9000 x 5824 = 52.4 million pixelspixels. You will not see any pixel structure, but those additional 48 million pixels had to be invented by the software based on the initial 4.2 million real image pixels. This 'invention' of image data can introduce artifacts.

 

So it is all about striking a balance between the visibility of the image pixel structure and the introduction of image artifacts.

 

What becomes important in striking that balance is viewing distance. It is obvious really, but the closer you get to view an image the more detail you can see.

 

There is a handy formula, based on good eyesight, to work out what ppi is required in order to avoid seeing image pixels.

ppi required = 6878/viewing distance in inches.

So, for example, if your poster will be viewed from say 4 feet away.

The formula gives 6878/48 = 143ppi. At that distance a higher ppi is finer than the eye can resolve.

Going any higher than that is wasted and just increases the chances of introducing resizing artifacts.

 

I hope that help

 

Dave

 

Edit : D Fosse posted while I was typing. We are both saying the same thing 🙂

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 12, 2024 Feb 12, 2024

@davescm 

 

Putting that formula into a basic script:

 

2024-02-13_11-42-34.png2024-02-13_11-42-40.png

 

 

/*
Print Resolution Calculator Viewing Distance - Feet.jsx
Formula from @davescm
v1.0 - 13th February 2024, Stephen Marsh
v1.1 - 14th February 2024, Added canvas size to the alert
https://community.adobe.com/t5/photoshop-ecosystem-discussions/photo-blow-up-question/td-p/14416674
https://community.adobe.com/t5/photoshop-ecosystem-discussions/quick-question-how-to-you-tackle-image-size-regarding-printing-projects-distance-dpi/m-p/13273751
NOTE: This script assumes that the correct print size is set in the Image Size window
*/

#target photoshop

if (app.documents.length) {
    var theViewingDistance = prompt("Enter the viewing distance in feet:", "1");
    if (theViewingDistance < 1) {
        theViewingDistance = 1;
    }
    var feetToInch = (theViewingDistance * 12);
    var theResult = Math.round(6878 / feetToInch);
    alert("Poster Size Print Resolution Calculator: " + "\r" + "Viewing Distance : " + theViewingDistance + " Feet" + "\r" + "Calculated PPI Value: " + theResult + " PPI" + "\r" + "Document Resolution: " + Math.round(app.activeDocument.resolution) + " PPI" + "\r" + "Canvas Size: " + activeDocument.width.as('in') + " x " + activeDocument.height.as('in') + " Inches" + "\r\r" + "(Based on the viewing distance, the ability to resolve 60 line pairs per degree and current document print dimensions)");
    
} else {
    alert("A document must be open!");
}

 

 

Or for those of us who use the metric system:

 

/*
Print Resolution Calculator Viewing Distance - Metres.jsx
Formula from @davescm
v1.0 - 13th February 2024, Stephen Marsh
v1.1 - 14th February 2024, Added canvas size to the alert
https://community.adobe.com/t5/photoshop-ecosystem-discussions/photo-blow-up-question/td-p/14416674
https://community.adobe.com/t5/photoshop-ecosystem-discussions/quick-question-how-to-you-tackle-image-size-regarding-printing-projects-distance-dpi/m-p/13273751
NOTE: This script assumes that the correct print size is set in the Image Size window
*/

#target photoshop

if (app.documents.length) {
    var theViewingDistance = prompt("Enter the viewing distance in metres:", "1");
    // Metres to feet
    theViewingDistance = (theViewingDistance * 3.281);
    if (theViewingDistance < 3.281) {
        theViewingDistance = 3.281;
    }
    var feetToInch = (theViewingDistance * 12);
    var theResult = Math.round(6878 / feetToInch);
    alert("Poster Size Print Resolution Calculator: " + "\r" + "Viewing Distance : "  + (theViewingDistance / 3.281) + " Metres" + "\r" + "Calculated PPI Value: " + theResult + " PPI" + "\r" + "Document Resolution: " + Math.round(app.activeDocument.resolution) + " PPI" + "\r" + "Canvas Size: " + (Math.round(activeDocument.width.as('cm') * 100) / 100 + ' x ' + Math.round(activeDocument.height.as('cm') * 100) / 100 + ' CM') + "\r\r" + "(Based on the viewing distance, the ability to resolve 60 line pairs per degree and current document print dimensions)");

} else {
    alert("A document must be open!");
}

 

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

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 12, 2024 Feb 12, 2024

That's clever Stephen. 

Dave

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Feb 13, 2024 Feb 13, 2024

Thanks Dave, however, that was simple compared to the original formula!

 

More could be done... Perhaps opening up Image Size with the calculated PPI value set, or just automating resizing a copy of the original with the calculated value. There are many possibilities depending on how far one wishes to take this!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Feb 14, 2024 Feb 14, 2024

Thank you so much for this thorough answer Stephen_A_Marsh! I really appreciate the detail you have given here

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 05, 2025 May 05, 2025
LATEST

A new version, combining the separate metric and imperial scripts into one script with a GUI, adding a scale factor field.

 

P.S. Just in case I broke something, I welcome testing and feedback, thanks.

 

EDIT: v1.3 Update, 21st August 2025

 

Poster_Viewing_Distance_Resolution_Calculator_v1-2.png

 

/*

Poster Viewing Distance Resolution Calculator v1-3.jsx
Stephen Marsh
v1.0 - 13th February 2024: Initial release
v1.1 - 14th February 2024: Added canvas size to the alert
v1.2 - 6th May 2025: Combined the separate metric and imperial scripts into a single script with a GUI, including a scale factor
v1.3 - 21st August 2025: Scale factor and minimum calculated PPI formula corrected

https://community.adobe.com/t5/photoshop-ecosystem-discussions/photo-blow-up-question/td-p/14416674#U15306592
https://community.adobe.com/t5/photoshop-ecosystem-discussions/photo-blow-up-question/td-p/14416674#U14419023
https://community.adobe.com/t5/photoshop-ecosystem-discussions/quick-question-how-to-you-tackle-image-size-regarding-printing-projects-distance-dpi/m-p/13273751

Related resources:
https://www.omnicalculator.com/other/pixels-to-print-size
https://www.insights4print.ceo/2025/04/stop-asking-for-300-ppi-or-dpi-images/
https://www.linkedin.com/pulse/300-ppp-le-culte-des-pixels-inutiles-branislav-mili%25C4%2587-1qx6f/?trackingId=OGo70EImQ5cm9d3Sqe4q5w%3D%3D

*/

#target photoshop

    (function () {
        // Check if a document is open
        if (!app.documents.length) {
            alert("A document must be open to use this script!");
            return;
        }

        // Create the input dialog window
        var dialog = new Window("dialog", "Poster Viewing Distance Resolution Calculator (v1.3)");
        dialog.preferredSize.width = 380;

        // Create the panel for dropdown and input field
        var inputPanel = dialog.add("panel", undefined, "Input Parameters");
        inputPanel.alignChildren = "left";
        inputPanel.orientation = "column";
        inputPanel.margins = 15;
        inputPanel.preferredSize.width = 350;

        // Dropdown for unit selection
        var unitDropdown = inputPanel.add("dropdownlist", undefined, ["Metres", "Feet"]);
        unitDropdown.selection = 0; // Default selection: Metres

        // Input field for viewing distance
        var distanceGroup = inputPanel.add("group");
        distanceGroup.orientation = "row";
        distanceGroup.add("statictext", undefined, "Viewing Distance:");
        var distanceInput = distanceGroup.add("editnumber", undefined, "1");
        distanceInput.characters = 8;

        // Input field for scale factor
        var scaleGroup = inputPanel.add("group");
        scaleGroup.orientation = "row";
        scaleGroup.add("statictext", undefined, "Scale Factor:");
        var scaleInput = scaleGroup.add("editnumber", undefined, "1");
        scaleInput.characters = 8;

        // Add help text for scale factor
        var helpText = inputPanel.add("statictext", undefined, "Scale Factor: 1 = 100%, 2 = 200%, 0.5 = 50% etc.");
        helpText.preferredSize.width = 320;

        // Event listener to change the editnumber field based on dropdown selection
        unitDropdown.onChange = function () {
            if (unitDropdown.selection.text === "Feet") {
                distanceInput.text = "3"; // Set to 3 for Feet
            } else if (unitDropdown.selection.text === "Metres") {
                distanceInput.text = "1"; // Set to 1 for Metres
            }
        };

        // Cancel and OK buttons
        var buttonGroup = dialog.add("group");
        buttonGroup.alignment = "right";
        var cancelButton = buttonGroup.add("button", undefined, "Cancel");
        var okButton = buttonGroup.add("button", undefined, "OK");

        // Define OK button action
        okButton.onClick = function () {
            var unit = unitDropdown.selection.text; // Get selected unit
            var viewingDistance = parseFloat(distanceInput.text); // Get entered distance
            var scaleFactor = parseFloat(scaleInput.text); // Get scale factor

            if (isNaN(viewingDistance)) {
                alert("Please enter a valid number for the viewing distance.");
                return;
            }

            if (isNaN(scaleFactor) || scaleFactor <= 0) {
                alert("Please enter a valid positive number for the scale factor.");
                return;
            }

            // Validate minimum viewing distance based on the selected unit
            if (unit === "Metres" && viewingDistance < 1) {
                alert("For Metres, the minimum viewing distance is 1.");
                return;
            } else if (unit === "Feet" && viewingDistance < 3) {
                alert("For Feet, the minimum viewing distance is 3.");
                return;
            }

            // Convert to feet if necessary
            if (unit === "Metres") {
                viewingDistance = viewingDistance * 3.281; // Metres → Feet
            }
            var inches = viewingDistance * 12;

            ////////////////////////////////////////////////////////////////////
            // A "minimal" constant of 3438 PPI (or x2 of 6878 PPI for "optimal
            // smoothness") is derived from the relationship between human visual
            // acuity and the resolution needed for a print.
            ////////////////////////////////////////////////////////////////////

            var minPPI = Number(3438);
            var optPPI = Number(6878);

            // ✅ Required PPI depends ONLY on viewing distance
            var requiredPPI = Math.ceil(optPPI / inches);

            // Document properties
            var doc = app.activeDocument;
            var docRes = Math.round(doc.resolution);

            // Original dimensions (px)
            var origWidthPx = Math.round(doc.width.as('px'));
            var origHeightPx = Math.round(doc.height.as('px'));

            // Scaled dimensions (px)
            var scaledWidthPx = Math.round(origWidthPx * scaleFactor);
            var scaledHeightPx = Math.round(origHeightPx * scaleFactor);

            // Original print dimensions (inches or cm)
            var origWidth = unit === "Metres" ?
                (Math.round(doc.width.as('cm') * 100) / 100) :
                (Math.round(doc.width.as('in') * 100) / 100).toFixed(2);
            var origHeight = unit === "Metres" ?
                (Math.round(doc.height.as('cm') * 100) / 100) :
                (Math.round(doc.height.as('in') * 100) / 100).toFixed(2);

            // Scaled print dimensions
            var scaledWidth = unit === "Metres" ?
                (Math.round((doc.width.as('cm') * scaleFactor) * 100) / 100) :
                (Math.round((doc.width.as('in') * scaleFactor) * 100) / 100).toFixed(2);
            var scaledHeight = unit === "Metres" ?
                (Math.round((doc.height.as('cm') * scaleFactor) * 100) / 100) :
                (Math.round((doc.height.as('in') * scaleFactor) * 100) / 100).toFixed(2);

            // ✅ Effective resolution after scaling
            var actualPPI = docRes / scaleFactor;

            // Format display strings
            var origSizeUnit = unit === "Metres" ? " CM" : " Inches";
            var origCanvasSize = origWidth + " x " + origHeight + origSizeUnit;
            var scaledCanvasSize = scaledWidth + " x " + scaledHeight + origSizeUnit;
            var origCanvasSizePx = origWidthPx + " x " + origHeightPx + " PX";
            var scaledCanvasSizePx = scaledWidthPx + " x " + scaledHeightPx + " PX";

            // Show the result in a new window
            var resultWindow = new Window("dialog", "Poster Viewing Distance Calculation Results");
            resultWindow.preferredSize.width = 400;
            resultWindow.orientation = "column";
            resultWindow.alignChildren = "left";
            resultWindow.spacing = 10;

            var resultGroup = resultWindow.add("group");
            resultGroup.orientation = "column";
            resultGroup.alignChildren = "left";
            resultGroup.spacing = 10;

            resultGroup.add("statictext", undefined, "Viewing Distance: " +
                (unit === "Metres" ? (viewingDistance / 3.281).toFixed(2) + " Metres" : viewingDistance + " Feet"));
            resultGroup.add("statictext", undefined, "Scale Factor: " + scaleFactor);
            var requiredText = resultGroup.add("statictext", undefined, "Required Minimum PPI: " + requiredPPI + " PPI");
            var actualText = resultGroup.add("statictext", undefined, "Actual Effective PPI: " + actualPPI.toFixed(0) + " PPI");
            var infoText = resultGroup.add("statictext", undefined,
                actualPPI >= requiredPPI ?
                    "Note: There appears to be sufficient pixels for output at this print size." :
                    "Note: There may be insufficient pixels for output at this print size.",
                { multiline: true });
            infoText.preferredSize.width = 365;

            // Original size
            resultGroup.add("statictext", undefined, "Original Print / Image Size:", { multiline: true });
            resultGroup.add("statictext", undefined, origCanvasSize + " (" + origCanvasSizePx + ") ");

            // Scaled size - only show if scale factor is not 1
            if (scaleFactor !== 1) {
                resultGroup.add("statictext", undefined, "Scaled Print Size:", { multiline: true });
                resultGroup.add("statictext", undefined, scaledCanvasSize + " (" + scaledCanvasSizePx + ")", { multiline: true });
            }

            // Disclaimer text
            var explanationText = resultGroup.add("statictext", undefined,
                '\nDisclaimer: Calculations are based on the viewing distance and visual acuity assumptions. The results are intended for informational purposes only and should not be considered as definitive guidelines for print quality. Upscaling to achieve higher PPI is rarely recommended. This script is provided "as is".',
                { multiline: true });
            explanationText.preferredSize.width = 365;

            // ✅ Color code pass/fail based on comparison
            if (actualPPI >= requiredPPI) {
                requiredText.graphics.foregroundColor = actualText.graphics.newPen(actualText.graphics.PenType.SOLID_COLOR, [0, 1, 0, 1], 1);
            } else {
                requiredText.graphics.foregroundColor = actualText.graphics.newPen(actualText.graphics.PenType.SOLID_COLOR, [1, 0, 0, 1], 1);
            }

            // Add Close button
            var buttonGroup = resultWindow.add("group");
            buttonGroup.alignment = "right";
            var closeButton = buttonGroup.add("button", undefined, "Close");
            closeButton.onClick = function () { resultWindow.close(); };

            resultWindow.layout.layout(true);
            resultWindow.layout.resize();
            resultWindow.center();
            resultWindow.show();

            dialog.close();
        };


        // Define Cancel button action
        cancelButton.onClick = function () {
            dialog.close();
        };

        // Show the input dialog
        dialog.center();
        dialog.show();
    })();

 

  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

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Feb 14, 2024 Feb 14, 2024

Wow thank you for taking the time to answer davescm!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines