How many pixels does an AI print need? 300 per i...

How many pixels does an AI print need? 300 per inch, and at 16x20 our PNG is over Etsy's download limit

By SJ
7 min read
Bar chart of file sizes for a photo at four print sizes, 8x10 to 24x36. PNG bars run from 11.3 to 70.6 MB and JPEG bars from 1.4 to 6.5 MB, with a dashed line at Etsy's 20 MB limit.
On this page

The usual answer is 300 pixels per inch of print: 2400 x 3000 for an 8x10, 4800 x 6000 for a 16x20, 7200 x 10800 for a 24x36. A square Midjourney 8.2 HD image is 2048 x 2048 and a square Gemini 4K image is 4096 x 4096, so neither reaches a 16x20 at that rate without more pixels. (Shops write DPI. Here it means pixels per inch of print.)

From a 4K Gemini picture we made 16x20 files of 4800 x 6000 pixels: the PNG is 35.8 MB, over Etsy's 20 MB per file for digital downloads, and the JPEG is 3.6 MB.

How many pixels does each print size need?

Multiply the print's width and height in inches by 300. The last two columns give the pixels per inch a square image has once it's cropped to the print's shape: its side divided by the print's long edge.

Print size Pixels at 300 DPI Megapixels From a 4096 px square From a 2048 px square
8x10 in 2400 x 3000 7.2 410 205
16x20 in 4800 x 6000 28.8 205 102
18x24 in 5400 x 7200 38.9 171 85
24x36 in 7200 x 10800 77.8 114 57

Midjourney's page says version 8.2 makes square images of 2048 x 2048 pixels in HD and 1024 x 1024 in SD. The HD size is 6.8 inches at 300 DPI, and "some posters can be printed at 150 DPI and still look clear because they are viewed from further away." Printify recommends 300 DPI and names 120 to 150 for large items such as leggings, blankets and tapestries. Printful asks for 150 to 300 depending on the product.

A 4096 px square gives 205 at 16x20, under the 300 Printify recommends and inside Printful's range. At 24x36 it gives 114, under the 120 Printify names for large items and under Printful's 150. Gemini can also make 4K images in the print's own shape: Google's page lists 3712 x 4608 for 4:5, 3584 x 4800 for 3:4 and 3392 x 5056 for 2:3, which is 230, 199 and 140 at 16x20, 18x24 and 24x36. Each product page gives its own requirement, so check it before you decide.

The DPI number inside a file changes none of this. The Gemini JPEGs we used say 300 DPI in their header and are 4096 pixels wide, which is 13.7 inches at 300. Changing the DPI of a photo changed neither its size nor a pixel in our earlier test, and Redbubble says "DPI and PPI don't affect your final uploaded image."

What do Etsy, Printify, Printful and Redbubble accept?

We read each shop's help page on 2 November 2026.

Shop File types Largest file Largest size in pixels
Etsy, digital downloads JPG, PNG, PDF, GIF, ZIP and others 20 MB, five files not stated
Printify JPEG, PNG, SVG 100 MB for JPEG and PNG not stated
Printful PNG or JPEG, PDF accepted 200 MB 20,000 x 20,000
Redbubble JPEG and PNG 300 MB 13,500 x 13,500

None of the four pages lists WebP or AVIF. Etsy's 20 MB is for the digital files you attach to a listing. Printify and Printful each give their own limits for the print files you upload to them.

A 24x36 at 300 DPI is 7200 x 10800 pixels, inside every pixel limit in the table. Redbubble also lists minimums by product: art prints need 3840 x 3840 pixels, which "cover all sizes up to extra large". A 4096 px Gemini square clears that and a 2048 px Midjourney image doesn't, but Redbubble's posters need 2870 x 4100 pixels at extra small and 8310 x 11790 at large, more than a 4096 px square has. Printify says it will "automatically enhance the quality" of a low-resolution file before printing, and still recommends high-resolution designs.

At 16x20, the PNG is over Etsy's 20 MB and the JPEG isn't

We cropped two 4096 x 4096 Gemini images to each print's shape, resampled them to the pixels above, and saved each as a PNG and as a JPEG at quality 90. One is a generated harbour scene in a photographic style, which we call the photo, the other a flat illustration of a bakery. Sizes are in MB of 1,000,000 bytes.

Print size Photo PNG Photo JPEG Flat PNG Flat JPEG
8x10 11.3 1.4 7.2 0.7
16x20 35.8 3.6 24.0 1.7
18x24 43.9 4.3 29.7 2.0
24x36 70.6 6.5 48.8 3.3

The PNG passes 20 MB at 16x20 for both pictures. Every JPEG stays under it, and the largest, the 24x36 photo, is 6.5 MB. Against its PNG, the 16x20 JPEG scored 84.3 on the photo and 82.3 on the illustration in SSIMULACRA 2, where 80 means distortion that isn't noticeable side by side. In our PNG post, a photograph's PNG cost 5.7 to 9.3 times its JPEG at quality 90 through zopflipng. Ours, with default PNG settings, cost 8 to 11 times.

The unresized 4096 px photo is 24.5 MB as a PNG and 12.1 MB as the JPEG Gemini sent at quality 100, the size we measured for Gemini's Nano Banana 2. These files were resampled, not upscaled by an AI model, so they hold no new detail, and the sizes are for resampled files. A file from an AI upscaler may weigh differently. We didn't run one and we didn't print anything.

What Iminify does with a print-size file

These are 16x20 files unless noted, run through Iminify's API on 2 November 2026 at Smart, its default level, or at Lossless where the table says so. The score is SSIMULACRA 2 against the file we uploaded.

Upload Iminify setting What came back Score
JPEG, 3.59 MB Smart JPEG, 1.96 MB 77.7
JPEG, 18x24, 4.26 MB Smart JPEG, 4.25 MB not scored
JPEG, 3.59 MB Smart, size limit 1,500 KB JPEG, 1.50 MB 69.3
JPEG, 3.59 MB Smart, size limit 800 KB JPEG, 0.68 MB, 2836 x 3545 not scored
PNG, 35.80 MB Lossless PNG, 35.37 MB not scored
PNG, 35.80 MB Smart PNG, 13.96 MB 64.8
PNG, 35.80 MB Smart, size limit 19,000 KB WebP, 2.59 MB 79.8
PNG, 35.80 MB Smart, size limit 19,000 KB, JPG JPEG, 2.30 MB 79.0
PNG, 35.80 MB Lossless, size limit 19,000 KB WebP, 1.53 MB 70.2
PNG, 35.80 MB Lossless, size limit 19,000 KB, JPG JPEG, 11.81 MB 89.1

Smart on the JPEG scored 77.7, below the 80 at which distortion isn't noticeable. Smart reduces a PNG to a palette of at most 256 colours, and this one scored 64.8, against the 70 where artefacts are perceptible but not annoying. With a size limit on the PNG, Iminify returned a WebP at both levels, a format Etsy's list lacks, until we asked for JPG. A limit that quality can't reach shrinks the pixels: 800 KB left 2836 x 3545, or 177 DPI at 16x20. Iminify's docs say Smart searches for a quality only up to 36 megapixels. The 18x24 is past that and barely changed.

A 24x36 at 300 DPI is 77.8 megapixels, and Iminify refused it with "the largest this tool can process is 64 megapixels". The 35.8 MB PNG is over a free account's 32 MB, and Pro takes 90 MB (pricing, 2 November 2026).

What to do with a 4K AI image

  1. Work out the pixels: the print's inches times 300, or times 150 for a large item where the shop's page allows it (Printify names 120 to 150).
  2. Compare them with the image you have. A 4096 px square gives 205 DPI at 16x20 and 114 at 24x36. If it falls short, Midjourney's page points to "third party upscaling tools". We tested none.
  3. Save a JPEG at quality 90, as ours were, unless the art needs transparency, and check its size against the shop's limit. A PNG over Etsy's limit is the case in the table: Iminify at Smart with a 19,000 KB size limit and JPG chosen returned a 2.30 MB JPEG in our API run, and Iminify's PNG page has the same Size limit setting.
  4. Keep the file under 64 megapixels if you want Iminify to compress it, and under 36 if you want Smart to search for a quality. A 24x36 at 150 DPI is 19.4 megapixels.

How we measured this

The sources are flash-1x1-4K-photo-r1.jpg and flash-1x1-4K-flat-r1.jpg from Google's Nano Banana 2 (gemini-3.1-flash-image), generated for our Nano Banana post. Google's page now calls that model the previous generation and recommends Nano Banana 2.1, which we didn't measure; its 4K sizes there are the same. ImageMagick 7.1.1-43 cropped each square to 4:5, 3:4 or 2:3, resampled it with Lanczos, stripped its metadata and wrote the PNG with default settings. cjpegli from jpegli saved the JPEG from the PNG's pixels at quality 90 with 4:2:0 chroma. SSIMULACRA 2 is libjxl 0.12.0's, run on a PNG directly and on a JPEG or WebP after libjpeg-turbo's djpeg or libwebp's dwebp decoded it. We scored the 16x20 files and the Iminify rows that show a score.

Questions this post answers

Share this post

Share on X
Share on Facebook
Share on LinkedIn
Share on Reddit
Share on Hacker News
Email
Copy link
Link copied
Two rows of seven squares, one per test post. After the default wp media regenerate, four squares are red and read 404 and three read 200; after --skip-delete and the rewrite, all seven read 200.

Convert your existing WordPress images to WebP without a plugin: what regenerate breaks

On a WordPress 7.1.4 test site, one filter and wp media regenerate turned the resized copies WordPress makes of five full-colour (4:4:4) photographs into WebP files with 62.5% of the JPEG copies' bytes. All 25 WebP copies, five sizes of each photograph, also scored lower. The filter and regenerate also left four of our seven test posts pointing at copies WP-CLI had just deleted, and took the srcset off all seven inserted images that had one. The version below leaves no address broken and gives six of those seven their srcset back: the filter, regenerate with one flag, and a rewrite that changes an address only where a WebP exists. The recipe as printed needs WP-CLI and a shell on the server.

8 min read
Bar chart of bytes Chrome downloaded at phone size for five 4K JPEGs on a Next.js static export page: 55.2 MB as they are, 10.2 MB as Smart JPG at full size, 1.29 MB at 1200 px wide, 767 KB through next-image-export-optimizer.

Next.js static export images: the default loader breaks them and unoptimized ships the original

We built a page with five photographs in a Next.js 16.4.3 App Router app, set output: 'export', left the image settings alone, and next build finished with exit code 0. In Chrome none of the five images loaded: every src pointed at /_next/image, an endpoint a static export doesn't contain. Setting images: { unoptimized: true } fixes that, and the export then serves the file you put in public/. Chrome at phone size downloaded 2.4 MB for five 1800 px photographs, and 55.2 MB when the same page held five 4K Gemini JPEGs. This post compares that flag, next-image-export-optimizer and resizing the files first by what Chrome downloaded at phone size and at desktop size. The table is in the second section, and the choice we'd make follows the three options.

7 min read
Iminify blog cover on a blue gradient with a pixel pattern: "Should you compress before your CDN does?"

Should you compress images before your CDN re-encodes them? Measured through Next.js, wsrv.nl and Photon

The Fjord, one of our five test photographs, is an 852,461-byte JPEG, the master every score below is measured against. Iminify's Smart level makes it a 568,598-byte JPEG. We sent both through Next.js 16.4.3's image optimizer at its default, WebP at quality 75. Next's WebP of the master weighed 321,790 bytes and scored 66.98 against the master on SSIMULACRA 2, where 100 means no difference from the master. Its WebP of the Smart file weighed 314,578 bytes and scored 64.30: 2.2 percent fewer bytes for 2.7 points. Should you compress before a CDN or optimizer re-encodes your image? In our tests, on five JPEG photographs through Next and wsrv.nl, only losslessly. A lossless repack, which made our uploads 2.4 to 5.6 percent smaller, changed nothing in 80 of 80 Next responses. And in 40 of 40 comparisons at no more bytes, asking Next for a lower quality setting scored higher than the lossy first pass. If nothing re-encodes after you, compress first.

7 min read

Try it on your own images

Drop a photograph in, pick Smart, and compare the result with the original before you download. Free, no account needed.