BorderPhotoAll toolsAdd a border

Border Photo: add a border to any photoFrame every photo like a gallery print.

Add a clean border, a mat or a Polaroid edge in seconds — or fit any photo to a square without cutting anything off.

or drop it herePaste works too. JPG, PNG, HEIC and more.

No photo handy?

FreeNo sign-upPhotos stay on your device

A lake and mountain photo with a white mat and a black gallery frameThe same photo cropped square in a white Polaroid frame with a deep bottom edgeThe wide photo fitted into a square with blurred bars above and belowA tall crop of the photo with a thick tomato-red borderA photo of mat boards with a thin, uneven black film edge

Three steps

From camera roll to framed print in under a minute.

  1. Step 1: Choose a photo

    Tap the button, drop a file or paste a screenshot. It opens right here on your phone or computer.

  2. Step 2: See it framed

    A clean border appears at once. Make it thicker, change the colour, or pick a ready-made look.

  3. Step 3: Download

    Save it as PNG, JPG or WebP at full size, ready to post, print or send.

All tools

Pick a frame for the job.

Every page opens the same editor, already set up for that job.

Worked examples

Two jobs, worked through

Every figure below is computed by the same function the tool runs, from the inputs named. Nothing here is a rounded-off illustration.

Print

A weighted mat for a framed print

A 4000 × 3000 file going to a lab, wanting a 20 mm mat with the lower edge weighted the way a framer would cut it.

Photograph
4,000 × 3,000 px
Margin asked for
20 mm at 300 PPI
Sides and top, drawn
236 px
Lower edge at 1.15×
272 px
Finished canvas
4,472 × 3,508 px
Which measures
379 × 297 mm

Photo pixels stay fixed, so the lab receives the full capture with paper around it. The finished size is not a standard sheet and the receipt says so rather than a preset pretending otherwise — a lab trims to the sheet it has, and the figure it needs is the one in millimetres.

Social

A panorama that has to survive a 4:5 feed

A 6000 × 2400 panorama posted to a feed that crops anything wider than 4:5. Padding is the only way nothing is cut.

Photograph
6,000 × 2,400 px
Minimum margin
40 px on every side
Target proportion
4:5
Finished canvas
6,080 × 7,600 px
Bars above and below
2,600 px each
Pixels of photograph lost
0

Proportion stays fixed and so does every pixel of the photograph; the bars carry the difference. Sampling the edge colour rather than using white keeps the composition reading as one image instead of a picture sitting on a card.

The measured version of the same tool

Space around a picture, given a number. Four edges, four units, and a readout that shows the arithmetic rather than hiding it.

Drop a photograph. Widths are measured against its long edge, so the fields below stay inactive until one is loaded.

Once a photograph is open, the rail gives each part of the border its own page — widths, fill, mat, corners, shadow, caption, recipes and output — and every figure stays editable.

JPG, PNG, WebP, AVIF, GIF, BMP and TIFF decode here. HEIC pulls a codec the first time it meets one.

One photograph, four measurements
20 mm · 236 px23 mm · 272 px236236
Photograph
3,000 × 2,000 px
Finished canvas
3,472 × 2,508 px
At 300 PPI
294 × 212 mm

The lower edge is 1.15 times the sides. That is the mounting convention, and it exists because an optically centred picture sits slightly above the middle — a mat measured dead equal looks as though the photograph is sliding down it.

A border is a quantity, not a style

The space around a photograph is a measurement before it is anything else. It has a width on each of four edges, those widths are expressed in some unit, and that unit has to resolve to whole pixels before a single byte can be written. Most tools that add a margin conceal all three of those facts behind a slider marked thin to thick. This one puts them in a rail and prints the result above the canvas.

Two intents arrive at this page and they want different things from it. One is presentation: a photographer or a printer wants a defined margin of a known size, usually white, usually even, sometimes weighted at the bottom the way a mounted print is. The other is fitting: a picture is the wrong shape for where it is going, and bars have to be added so that nothing gets cut off. The second is the larger job by a distance, and it is the one most competitors treat as an afterthought.

The same 5 mm margin, resolved against three declared resolutions
ResolutionMargin in pixelsA 4000 px edge becomes
72 DPI14 px4028 px
150 DPI30 px4060 px
300 DPI59 px4118 px

Working the rail from the top down

The first control asks what should stay fixed, and it is first because the answer decides what every other number on the page means. It used to be named after the mechanism — grow, inset, fit ratio — which describes what the code does rather than what you are choosing. Photo pixels fixed adds the border outside the picture: the photograph keeps every pixel it arrived with and the output file is larger by the sum of the two widths on each axis. Canvas fixed draws the border within the original dimensions, so the output matches the input and the picture is resampled smaller to fit the space that is left. Proportion fixed ignores the question of thickness and asks a different one: what shape should the finished frame be, and what should fill the difference. Pixels fixed goes one step further and names the exact output — 1080 by 1350 for an Instagram post, 640 by 640 for a WhatsApp DP — and contains the photograph inside it, reduced if it must be, never cropped, and never enlarged unless you tick the box that allows it.

Below that sit the unit and the resolution, in that order, because a width in millimetres is meaningless until the second field has a number in it. The figure is pixels per inch, whatever the file calls it. A printer’s own dots per inch is a different and usually much larger number — an inkjet laying down 1,440 dots per inch is describing its nozzles, not your picture — and neither figure says anything about how much detail the photograph actually holds. What this field does is decide how many pixels a millimetre is worth, and nothing else. The tool reads the JFIF density block of a JPEG, the resolution tags in its Exif block, and the pHYs chunk of a PNG, and it shows which one it found. When a file declares nothing, the field reads unset and the millimetre entry stays inactive — an assumed 72 or an assumed 300 would be a guess presented as a measurement.

The four edge fields come next, linked by default. Linked, one number drives all four and a weighting control lets the lower edge run between 1.1 and 1.3 times the sides, which is the convention a framer uses so that a mounted picture does not appear to be sliding down its own mat. Unlinked, each side is independent. Arrow keys move the focused field by one unit and Shift-arrows by ten; L toggles the link; and the button beside the measurement line hides the border for as long as you want it hidden, with Space as the quick glance for anyone who prefers a gesture.

Containers this page will decode

JPG, PNG, WebP, AVIF and GIF decode through the browser’s own image pipeline on every browser this site supports. BMP, TIFF and ICO go through the same pipeline and are therefore at its mercy: Safari reads TIFF, Chrome and Firefox generally do not, and this site ships no TIFF decoder of its own — so a TIFF may simply be declined, with the reason named, rather than silently failing. HEIC — what a recent iPhone writes by default — needs a WebAssembly decoder that is fetched the first time one of them is opened and is absent from the page until then, so nobody who never opens a HEIC ever downloads it.

Four container details change what the tool says rather than what it does. A JPEG with four colour components is CMYK or YCCK; it is converted to sRGB on decode and the rail names the conversion. An animated GIF or WebP contributes its first frame, stated before you export rather than discovered afterwards. A source with an alpha channel keeps it, and the border is drawn in the colour you chose or left empty — it is never quietly flattened onto white. And the orientation flag is resolved before anything is measured, because a rotated frame changes which edge is the long one and therefore what a percentage means.

Guardrails are evaluated against the output, not the input, which matters here more than on most tools: a 24-megapixel photograph with a 60 mm margin at 300 DPI composites to well over 30 megapixels, and the ceiling that matters is the one the finished canvas has to clear. Past roughly 32 megapixels (16 on iOS) a lighter working copy is offered as a choice; past 100 (40 on iOS) the file is declined with the measured figure named.

Two things this tool will not do

Both are limits of the operation itself, not of this implementation.

  • Padding a photograph into another proportion adds no information to it. The bars are inert: they carry no detail, and enlarging the result later enlarges empty colour along with the picture. The alternative — filling the frame instead — means cropping or enlarging, and both cost something. One loses the edges of the composition, the other softens the whole picture. This tool chooses the loss you can see and measure.
  • The composite is redrawn and re-encoded, so an embedded colour profile does not survive it. Output is sRGB and a wide-gamut original is converted on the way in. Capture data and location tags do not survive either; the saved file holds pixels and the dimensions of those pixels, and nothing else. If either matters to the destination, keep the original alongside the bordered copy.

Questions the measurements raise

I asked for a 5 mm border and the readout said 59 pixels. Where does that number come from?

From the resolution the file declares. A millimetre is a distance on paper and a pixel is a cell in a grid, and the only thing that converts one into the other is a figure for how many cells occupy an inch. At 300 DPI, 5 mm is 5 ÷ 25.4 × 300, which is 59.06 and rounds to 59. Change the resolution field to 150 and the same 5 mm becomes 30 pixels. Neither figure is more correct than the other; they describe different sheets of paper.

One percentage gave me a thick top edge and a thin side edge. Is the setting broken?

No, and the readout is showing you why. A percentage here resolves against the long edge of the photograph, so on a 4000 by 1000 panorama a 3% border is 120 pixels on every side — which is a twelfth of the height and a thirty-third of the width. It looks unequal because it is equal in absolute terms and unequal in relative ones. If you want the four margins to look matched on a long frame, switch to pixels or unlink the sides.

Does padding a photograph out to a square change the photograph?

Nothing is cropped and nothing is resampled. Fit-to-ratio computes the smallest frame of the target proportion that contains the picture at its own size, centres the picture in it and fills the remainder, so the photograph's own grid is copied across one cell at a time and what changes is the number of rows and columns around it. That is the opposite operation to cropping, which reaches the same proportion by removing pixels instead. Two honest qualifications, because “untouched” would not survive either: exporting as JPG re-encodes every pixel including the photograph's, and a wide-gamut original is converted to sRGB on the way in. Neither moves a pixel, and both change its value. PNG out, from an sRGB original, is the case where the grid really does arrive identical.

The resolution field says the file claims 72 DPI. Should I believe it?

Treat it as a statement of intent by whatever wrote the file, not as a measurement of the picture. Many cameras and most screenshot utilities write 72 because it was once a screen convention and nothing has cleared it since. The pixels are unaffected either way. If the print is going out at 300, put 300 in the field and the millimetre widths recompute against that.

Fixed photo pixels or fixed canvas — which one does a print shop want?

It depends on which dimension the job has already fixed, which is why the control is named after that rather than after the mechanism. If the lab prints to whatever you send and trims to it, keep the photo pixels fixed: the photograph stays at full size and paper is added around it, so a 4000 by 3000 file with a 60-pixel margin arrives as 4120 by 3120 with the image area unchanged. But plenty of print destinations do not work that way — a photo-book page, a print-on-demand template, a lab that only offers named sheet sizes, or any layout with the dimensions already decided all require a fixed canvas, and then the border has to come out of the frame you already have. Keeping the canvas fixed resamples the photograph smaller to make room, and the receipt under the canvas shows you exactly how much smaller.

Can the bars be empty rather than white?

Yes, with the transparent fill and a PNG export. The border region is left with an alpha of zero and whatever the file is placed on shows through. A JPG cannot hold that — the format has no alpha channel at all — so choosing JPG with a transparent fill writes the bars as white, and the rail says so before you export rather than after.

What the two output formats cost

The export row offers PNG, JPG and WebP, and the choice is not cosmetic: it decides whether the bars can be empty and whether the photograph is compressed a second time on its way out. WebP is offered only once this browser has proved it can write one — several accept the request and hand back a PNG wearing the wrong name, so the tool encodes two pixels first and greys the option out if the answer comes back wrong.

The same 4000 by 3000 photograph with a 60-pixel border, exported both ways
Part of the exportPNGJPG at quality 92
A border of flat colourCosts almost nothingCosts almost nothing
A border left emptyHeld as alphaWritten as white
The photograph itselfRe-encoded without lossRe-encoded with loss
The whole fileOrder of 10 MBOrder of 2 MB

A flat region compresses to near nothing in either format, so the border is never what makes the file heavy — the photograph is. That is why PNG is the default here and the wrong default almost everywhere else: a bordered picture is usually on its way to a printer or a frame shop, where one generation of loss is one too many. When the destination is a web page and the original was a JPG already, JPG out costs a second generation that nobody will see and takes most of the weight off.

The same instrument, opened differently

Every route opens this workbench in a different starting state, because the first thing a visitor sees ought to match what they came for: a square pad, millimetres with the file’s resolution on screen, an exact Instagram or WhatsApp size, a white border with a check on the saved file, or a mat and frame band ready to edit.

The written notes go further into the arithmetic than a rail can. They are indexed on one page, and each of them answers a question the readout raises but has no room to settle.

Decode, composite and encode all execute in the page process, so no request made by this site carries your photograph.