Skip to main content

Free Add Text to Photo

Add draggable text captions to any photo — fonts, colors, outline and shadow — and export full-res.

Works offline once loaded

Drop a file here, or click to browse

HEIC, HEIF · processed on your device

or press Ctrl+V to paste from your clipboard

Browse files

Your files never leave your device. All processing happens locally in your browser.

🔒 Your photo is edited entirely in your browser — nothing is uploaded.

Common uses

  • Caption a PhotoPut a readable caption on any picture.
  • Meme-Style TextClassic bold top/bottom text.
  • Birthday CardTurn a photo into a greeting.
  • Name on PhotoAdd your name or handle to a shot.
  • Quote on ImageLay an inspiring quote over a photo.
  • Product CalloutsLabel features right on the photo.

How It Works

Add one or more text layers to any photo and drag each exactly where you want it. Five font styles, any color, plus outline and shadow toggles that keep text readable on busy backgrounds. Exports at full resolution as JPEG or PNG, all in your browser.

  1. 1
    Add a photo
    A starter text layer appears ready to edit.
  2. 2
    Write and style
    Font, size, color, outline and shadow per layer.
  3. 3
    Drag into place
    Move each text layer right on the photo.
  4. 4
    Export
    Full-resolution JPEG or PNG download.

Your photo is edited entirely in your browser — nothing is uploaded.

Guide

Worked example

Press "Try a sample". The photo sample-image.png (1200 × 800) opens with one text layer saying "Your text here" in the lower part, at "Text size: 86px". Change the "Text" box to Sunset over Lisbon, then press "Meme" under "One-tap looks". The font becomes Condensed with a 10% black outline, and the text size rises to 135px. Beside the "Export size" buttons the size reads 1200 × 800, and pressing "1080 px" changes it to 1080 × 720. Press "4:5 portrait" and it reads 1080 × 1350. The picture is cropped from the centre, "Box width" still reads 90%, and the text re-fits at 109px on two lines, "Sunset over" and "Lisbon". Leave "Format" on JPEG with "Quality: 90" and press "Download". The file is called sample-image_text.jpg.

Which settings to use, and the limits

  • Use one layer for each piece of text. Press "+ Add text" for another layer. It goes in the first free row, starting in the middle, and copies the font of the selected layer. It starts at one sixteenth of the picture width, which is 75px on the sample. Press Enter in the "Text" box to start a new line. Once there are two layers, a list called "Layers (top to bottom)" appears with "Bring forward", "Send backward", "Duplicate layer" and "Delete layer" for each. "Remove selected" deletes the current layer. Click a name in the list to select a layer that is hidden behind another.
  • Move text by dragging, or with the keyboard. Drag the text on the photo. Near the centre it snaps, within 1.2 percent of the picture width, and a pink guide line appears; the guides are never saved. Click the preview once to focus it, then use the arrow keys. Each press moves the text by 1/200 of the picture width, at least 2 px (6 px on the sample), and Shift makes the step five times bigger. Delete removes the layer. "Undo" and "Redo" keep the last 60 steps (Ctrl+Z, Ctrl+Shift+Z or Ctrl+Y). On a phone the preview stays pinned at the top while you scroll the controls.
  • Make text readable on a busy photo. "Outline" and "Shadow" are on when a layer is created. The outline is black and 8 percent of the text size, and its width can be set from 1 to 25. "Background" puts a rounded bar behind the text, with its own colour. "Darken photo" dims the whole picture from 0 to 80%, and "Opacity" runs from 5 to 100%. The "One-tap looks" set several options together. "Meme" is Condensed with a 10% black outline. "Subtitle bar" is a black bar at 65% opacity with no outline. "Quote card" is Serif with a shadow and darkens the photo to at least 40%.
  • Let "Fit text" choose the size. "Text size" runs from 12 to 400px. "Fit text" picks the largest size at which no word is cut and the text is at most half the picture height; for the starter text on the sample that is 181px. The starter text and the one-tap looks begin in an automatic mode and shrink as you type, keeping the text within 30 percent of the picture height, until you move the "Text size" slider. "Box width" (10 to 100 percent of the picture width, 90 to start) sets where lines wrap. A word wider than the box is split between letters; text without spaces, such as Chinese, wraps the same way.
  • Pick the font that matches your language. The fonts are Sans, Serif, Script, Condensed and "Arabic / Persian". They are open-licence faces served from this site and loaded the first time you use them, so the first change can take a moment. The Arabic face is added automatically when the text contains Arabic letters, and it is chosen from the start when the page language is right-to-left. Text direction follows the first letter you type. "Letter spacing" runs from -5 to 30 in percent of the text size, and older Safari versions ignore it. "Rotation" runs from -180 to 180 degrees.
  • Choose the export size and format. "Export size" offers "Original", "1080 px" and "4:5 portrait", and shows the resulting size beside the buttons. Photos with a side over 4096 px are scaled down to 4096 when they load, so "Original" never goes beyond that. "1080 px" fits the longer side to 1080 and never enlarges. "4:5 portrait" crops from the centre and sets the width to 1080, so a small photo is enlarged: 800 × 600 becomes 1080 × 1350. "Format" offers JPEG, PNG and, if your browser can save it, WebP. "Quality" runs from 50 to 100 and is hidden for PNG. A "Share" button appears where the browser can share files.

Common problems and how to fix them

It says "Could not load this image. It may be an unsupported format."
The browser could not decode the file as a picture. The drop zone takes any image type and converts iPhone HEIC photos itself, but your browser still has to be able to read the file. A damaged or half-downloaded file, or an uncommon format, fails here. Open the file in another program and save it again as JPEG or PNG, then add it. A file of 0 bytes, often a OneDrive or iCloud placeholder, is refused earlier with its own message.
It says "Could not export the image. Please try again."
The browser returned no image data when you pressed "Download" or "Share" for the chosen size and format. Your text layers are still in place. Choose "1080 px" under "Export size", or switch "Format" to JPEG, and press the button again. Photos larger than 4096 px on a side are already scaled down on load, so a smaller export size is the next thing to try.
The text is missing after you press "4:5 portrait".
That option crops the picture from the centre, keeping a 4:5 slice. On the 1200 × 800 sample only the middle 640 px across stays. Layers outside that slice are not moved, so they fall outside the preview and the saved file. Only the box width and automatic size are adjusted. Drag the text back into view, or return to "Original". The preview shows the same crop that will be saved.
Transparent parts of a PNG turn black in the saved file.
The photo is drawn on a canvas with no background fill, and JPEG, the default "Format", has no transparency, so the transparent pixels are written as black. Choose PNG under "Format" to keep the see-through areas, and keep JPEG for ordinary photos.
Clicking the photo does not select the text.
A click selects a layer only if it lands inside the text's box, plus a margin of 20 px sideways and 16 px up and down, measured in picture pixels. On a large photo shown small, that margin is only a few screen pixels, so aim at the letters. Where layers overlap, the top one wins. Once there are two layers you can also pick one from the "Layers (top to bottom)" list.

How it compares

A phone photo app or a desktop editor can do more, such as filters, stickers, free cropping and saved projects. This tool does text layers only, with "Darken photo" and three export sizes. It works on one photo at a time, cannot edit text that is already part of a picture, and keeps no project: reload the page and you start again. The photo is read and drawn in your browser and is not uploaded. The saved file is drawn from pixels, so it does not carry the original file's camera details. Use it for captions, memes and quote cards, and use a full editor for anything more.

Related Tools

Frequently Asked Questions