Add Text to Photo
Drop as many text layers onto a photo as you need, each with its own font, size, color, outline, and shadow, and drag them anywhere instead of being stuck with a fixed top-and-bottom caption. Everything is composited on your device and downloads as a flattened PNG.
Published: / Published by the HakoTools team
Upload an image
How it works
What is this photo text editor?
A free, in-browser tool for putting text on a photo and downloading the result as a PNG. Unlike a single fixed-position caption generator, it lets you add any number of independent text layers, each with its own font, size, color, outline, and shadow, dragged to wherever you want it on the image. Nothing is uploaded; the photo and the text are composited entirely on your device using the canvas element.
How to use it
- Press Upload an image and choose a photo (JPEG, PNG, and most common formats work)
- Type your text into the text box
- Adjust font, size, text color, outline color, outline width, and shadow
- Drag the text directly on the preview, or fine-tune with the X / Y position sliders
- Press + Add for a second line or a separate caption, and position it independently
- Press Download PNG to save the image at its original resolution with the text flattened in
How do I keep text readable over a busy photo?
Add an outline in the color opposite the text (2 to 4px is usually enough): white text with a black outline, or black text with a white outline. A plain fill color alone can vanish wherever the photo behind it happens to match, but an opposite-color outline holds the letterforms together whether that patch of photo is light or dark. A light shadow on top softens the outline's hard edge without giving up its readability. This tool exposes outline width from 0 to 20px and shadow blur from 0 to 30px on sliders (the field itself accepts up to 50px and 100px respectively).
The difference shows up clearly side by side. The figure below places the same word over a background that shifts from dark to light, in three treatments:
How is this different from a meme generator?
A classic meme generator locks you into a fixed top caption and bottom caption in one bold display font. This tool has no fixed slots: add one text layer or ten, drag each one to any spot on the photo, and set its own font, size, and color independently of the others. That makes it a better fit for a photo caption, a date stamp in a corner, a two-line title plus subtitle for a thumbnail, or bilingual labels stacked on top of each other, none of which fit a top/bottom template.
Why does it only save as PNG?
Because JPEG's lossy compression blurs hard edges, and text edges are exactly that: a sharp boundary between a letter and the background right behind it. Small font sizes and thin outlines show the ringing first. PNG's lossless compression keeps those edges crisp at the cost of a larger file for a photo with lots of color variation. The image you upload can still be a JPEG; only the download is fixed to PNG.
What can I use this for?
- Video and article thumbnails: one or two short, large text layers over a photo is most of what a clickable thumbnail needs. Split a headline and a sub-line into two separate text layers so each can sit at its own height and size
- Photo captions for slides and reports: write the location, date, or a one-line explanation straight onto the photo when the slide layout has no separate caption field
- Date or credit stamps: a small text layer in a corner with a date or a photographer's name travels with the image even through a screenshot or a re-share where metadata gets stripped
- Marketplace listing notes: write "SOLD," "reserved," or a size directly onto a product photo so the note is visible in a thumbnail grid, not just in a text field buyers might not open
How does the text get drawn onto the image?
The photo is drawn onto an HTML canvas element, then each text layer is drawn on top withstrokeText (for the outline) followed by fillText (for the fill), and the shadow comes from the canvas's own shadowBlur property. Everything happens in that one canvas in your browser; there is no network request and no web font is downloaded, since the fonts drawn are whichever system fonts (sans-serif, serif, or rounded-style) are already installed on your device.
Notes
- Fonts are your device's installed system fonts, so the exact look varies a little by OS and device; the tool doesn't download any web font
- Font size accepts 1 to 500px. Downloaded images keep the original photo's resolution with the text flattened in, so there's no way to edit or remove the text after the fact — start over from the original photo if you need a change
- Each text layer is a single line with no automatic wrapping; split a long line across multiple layers and offset their Y position
- iOS Safari has historically capped a canvas at about 16.7 million total pixels (roughly 4096×4096); iOS 18 raised that ceiling to about 67 million pixels (roughly 8192×8192). A phone photo at its default resolution (often around 12MP, about 4032×3024) fits either limit, but a shot taken in a phone's high-resolution mode (48MP and up) can still exceed the newer one. The tool checks the canvas after loading a photo and tells you when the device refused it, so downscale the source photo first or update iOS
- Downloads are PNG only; convert afterward if you need another format
Frequently asked questions
- Can I add more than one line of text to a photo?
- Yes. Press + Add for each new text layer; every layer has its own font, size, color, outline, shadow, and position, so a headline and a sub-line (or two languages stacked on top of each other) can each be styled and placed independently.
- Is this the same as a meme generator?
- Not quite. A typical meme generator locks you into one bold font in a fixed top caption and bottom caption. This tool has no fixed slots: drag any number of text layers to any position on the photo, each with its own font, size, and color.
- Is my photo uploaded anywhere?
- No. The photo and the text are drawn together on an HTML canvas element in your browser, and the result never leaves your device until you choose to download it.
- Why can I only download a PNG?
- JPEG's lossy compression blurs the sharp edges of text, which shows up as ringing around small or thin letters. PNG is lossless, so the text stays crisp; the image you upload can still be a JPEG.
Related tools
Image
EAN-13 Barcode Generator with Check Digit & Batch Print
Generate EAN-13 or EAN-8 barcodes with an automatic check digit and download SVG or PNG. Batch mode makes a printable sheet, all in your browser.
Image
Custom Text Emoji Maker for Slack & Teams
Type a word or phrase and turn it into a 128x128 transparent PNG emoji for Slack or Teams. No image upload, no sign-up, runs entirely in your browser.
Image
Scrolling LED Sign Maker for Concerts
Turn your phone into a custom dot-matrix LED sign for concerts and arrivals. Set colors, speed and orientation, then go fullscreen. Free, no app, no sign-up.
Image
Photo Sheet Layout: Fit Multiple Photos on One Print
Lay several photos onto one 3.5x5, 5x7 or A4 sheet at true physical size, with a white border, cut guides and a chosen dpi. JPEG or PDF, in your browser.