Megapixel print size calculator
This megapixel print size calculator estimates how large a camera image can be printed while maintaining a chosen resolution.
Run — free
Enter the image resolution in megapixels and the target DPI, then optionally set its aspect ratio. The calculator derives estimated pixel dimensions, maximum width, and maximum height in both inches and centimetres. It is useful when you know a camera specification or exported image resolution but do not yet have exact pixel dimensions available.
Turn a megapixel rating into practical print dimensions
A megapixel count tells you the approximate total number of pixels in an image, but it does not state how those pixels are arranged across width and height. This calculator fills that gap by combining megapixels with an aspect ratio. The default ratio is 3:2, a common shape for interchangeable-lens and other cameras, but you can enter another width-to-height ratio when your image uses a different format. The calculation treats one megapixel as one million pixels. It finds theoretical width and height values whose product equals that pixel total and whose relationship matches the selected aspect ratio. Those derived dimensions are then divided by the requested DPI to estimate the maximum physical print dimensions. The reported pixel dimensions are rounded to whole pixels for readability, while the physical dimensions are calculated from the unrounded theoretical values. Because manufacturers and editing software may round megapixel labels, use the result as a planning estimate rather than a replacement for inspecting the final file's exact pixel dimensions before production printing.
Choose a DPI that matches the print and viewing distance
DPI in this calculation describes how many image pixels are allocated to each printed inch. A higher target produces a smaller print because the same pixel budget is packed more densely; a lower target produces a larger print because those pixels are spread across more space. For example, entering 300 DPI represents a demanding target often used for close-viewed photographic output, while a lower value may be reasonable for a poster seen from farther away. The calculator does not declare one DPI universally correct, since perceived sharpness also depends on viewing distance, subject detail, paper, printer behavior, sharpening, and the viewer. Instead, it answers a narrower and verifiable question: what dimensions preserve the resolution you selected? Remember that printer advertising may use DPI to describe ink-dot placement, whereas an image workflow may call the pixel sampling rate PPI. This estimator uses the entered figure as pixels per printed inch, even though the familiar field name and search term are DPI. Confirm the preferred input terminology with your print provider for critical jobs.
Interpret the estimate and prepare the final file
Read the maximum width and height as a boundary for the selected megapixel count, aspect ratio, and DPI. Printing at those dimensions uses the full estimated pixel area without resampling. Printing smaller increases the effective pixel density, while printing larger lowers it unless software invents pixels through upscaling. The result includes inches and centimetres so you can compare it directly with frames, paper sizes, lab ordering systems, and layout specifications. Aspect ratio matters just as much as megapixels when checking fit: a 3:2 photograph and a square photograph with the same megapixel count have different side lengths. If the paper shape does not match the image, the usable result may require cropping, borders, or a smaller fitted image. Before placing an order, inspect the exported file's actual pixel width and height, apply the intended crop, and account for any bleed requested by the printer. This tool intentionally does not model crop loss, bleed, interpolation quality, printer margins, or color management; it provides a clean geometric estimate for early planning and comparison.
What you can do with it
Compare cameras for print work
Translate different camera megapixel ratings into comparable print dimensions at the same target resolution and aspect ratio.
Plan wall art before exporting
Estimate whether a source image has enough resolution for a proposed frame or poster size before preparing the final file.
Set expectations for client prints
Give clients a clear size estimate based on camera resolution while explaining the role of DPI, crop, and viewing distance.
FAQ
How is the maximum print size calculated?
The calculator converts megapixels to total pixels, derives width and height from the aspect ratio, and divides each dimension by the target DPI.
Why does the calculator need an aspect ratio?
Megapixels describe pixel area, not image shape. An aspect ratio is required to turn that area into separate width and height estimates.
Is 300 DPI always required for a good print?
No. An appropriate resolution depends on viewing distance, print process, subject detail, and quality expectations. Enter the target specified for your job.
Will the result exactly match my image file?
Not necessarily. Camera megapixel ratings can be rounded, and cropping changes pixel dimensions. Use the actual exported file dimensions for final production decisions.
Does the estimate include cropping or bleed?
No. It assumes the full image area is used. Subtract pixels lost to cropping and allow separately for any bleed required by the printer.
What does the API request cost?
Each API request costs $0.002. The browser version can run locally without sending the calculation to the API.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/image/print-size-from-megapixels \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"megapixels":24,"dpi":300}'const res = await fetch("https://api.kit.forhosting.com/image/print-size-from-megapixels", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"megapixels": 24,
"dpi": 300
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/print-size-from-megapixels",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"megapixels": 24,
"dpi": 300
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/print-size-from-megapixels", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"megapixels":24,"dpi":300}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"megapixels":24,"dpi":300}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/print-size-from-megapixels", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"megapixels": 24,
"dpi": 300
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.print_size_from_megapixels",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_mb | 15 |
max_megapixels | 12 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |