Make a WhatsApp/Telegram Sticker from a Photo

Turn a photo into a chat sticker with a white die-cut border, resized to 512x512 for WhatsApp/Telegram, in your browser. Free, no upload, no watermark.

🌐 Español

Drop your files here (.jpg, .jpeg, .png, .webp)

🔒 Private by design: your files are processed locally in your browser and never uploaded to any server.

What makes a sticker a sticker

Open any sticker pack in WhatsApp or Telegram and the shared visual language is obvious: no rectangle, no background, and a thick white outline hugging the subject. That look is not decoration. A sticker floats on top of a chat bubble whose colour you cannot predict, in a theme you cannot predict, so the white ring is what stops a dark subject from disappearing into a dark bubble.

Underneath that there is a technical spec, and it is stricter than most people expect. Both platforms want a 512 by 512 image with real transparency. A cropped square JPG will not do, because JPG has no alpha channel at all and the square edges will show. That is three separate jobs stacked on one photo: remove the background, add the outline, land on exactly 512 by 512. Doing them by hand means a selection tool, a stroke layer and a canvas resize, in that order, without accidentally clipping the subject.

This page does all three in one pass, and this article is mostly about the two decisions it makes on your behalf.

The die-cut border is a distance transform

The interesting part of the pipeline is how the outline gets drawn. The naive approach is to repeat a dilation step once per pixel of border width, checking each pixel’s eight neighbours each time. At the default 14 pixel border on a 512 by 512 canvas that is fourteen full passes over a quarter of a million pixels, and it gets worse linearly as you widen the border.

Instead we compute a Chebyshev distance transform: for every pixel on the canvas, the distance to the nearest subject pixel, measured in king’s moves on a chessboard. A forward sweep from the top-left propagates distances from the neighbours already visited, and a backward sweep from the bottom-right fills in the rest. Two passes total, regardless of border width. Any pixel whose distance is at or below the border width becomes opaque white, anything further becomes fully transparent, and any pixel that was already part of the subject is copied through byte for byte.

Chebyshev distance is exactly what repeated eight-connected dilation produces, so the result is identical to the slow version. We checked that claim against a hand-worked case before trusting the general machinery: a 4 by 4 opaque square in the middle of a transparent canvas, dilated by 2, must come out as an exact 8 by 8 square rather than a rounded blob. The test file pins that down pixel by pixel, because a rounded corner there would have been the first visible sign that the sweep logic was wrong.

One side effect is useful. Because the alpha channel is thresholded at the halfway point before the sweep runs, the faint semi-transparent halo that background removal often leaves just outside the subject is squared off rather than preserved as a ghost ring around your outline.

Contain-fit onto 512 by 512, and why we pad instead of crop

The other decision is what to do when your photo is not square, which it almost never is. Two options exist: crop to a square, or scale to fit and pad the leftover space.

We fit and pad. The subject has already had its background removed at this point, so the padding is the same transparency the removal step produced and is completely invisible in a chat. A crop, by contrast, would silently remove part of whatever survived the cutout. On a wide photo that means an outstretched arm; on a tall one it means the top of someone’s head. Losing the subject to save empty pixels is the wrong trade for a sticker.

The fit also scales up, not just down. This is a deliberate departure from how a normal resize tool behaves, where refusing to upscale is the polite default. A sticker is expected to fill most of its frame the way every pack you have seen does, so a 200 pixel source is enlarged to fill the square. The honest cost is softness on very small sources. If your only copy of a photo is tiny, run it through Upscale Image before making the sticker rather than accepting the plain scale-up here.

Making a pack

  1. Drop in one photo or a whole batch of JPG, PNG or WebP files.
  2. Set the border width, or leave it at 14. Set it to 0 if you want a bare cutout.
  3. Pick WebP for WhatsApp or PNG for a tool that insists on it.
  4. Run it. The first photo takes noticeably longer than the rest, because the segmentation model has to load before any pixels can be processed; after that it stays in memory and each additional photo is much quicker.
  5. Save each result. Files are named after the source with -sticker appended.

Progress is weighted so the background removal accounts for most of the bar within each photo, which is honest about where the time actually goes: the border sweep and the encode are trivial next to running a segmentation model. Keep the border width consistent across a batch if you want the pack to look like a set rather than a collection.

When another tool fits better

If you want the transparent cutout on its own with no sticker framing, go straight to Background Remover, which is the same model without the 512 pixel canvas or the outline. For a round avatar rather than a die-cut shape, Circle Crop is the right shape. For a caption-on-image reaction rather than a cutout, Meme Generator is the tool, and if your subject was shot against an actual green screen, Remove Green Screen keys it out more cleanly and much faster than a neural model can.

See it in action

Screenshot of the Make a WhatsApp/Telegram Sticker from a Photo tool with sysfenix-sample.png (466 KB) loaded, Border width (px, 0 = none) set to 14, Output format set to WebP (WhatsApp default)
Make a WhatsApp/Telegram Sticker from a Photo mid-process: sysfenix-sample.png (466 KB) loaded, Border width (px, 0 = none) set to 14, Output format set to WebP (WhatsApp default).
Screenshot of the Make a WhatsApp/Telegram Sticker from a Photo result screen showing sysfenix-sample-sticker.webp ready to download (516 B, 100% smaller)
The finished result: sysfenix-sample-sticker.webp ready to download (516 B, 100% smaller). The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

What border width should I use?

The default of 14 pixels is a good starting point and is measured on the final 512x512 canvas, so it means the same visual thickness no matter how large your source photo was. Go thicker, up to 40, for a subject with a busy silhouette that needs help separating from a dark chat bubble. Go thinner, around 6 to 8, for a subject with fine detail you do not want swallowed. Set it to 0 for a plain transparent cutout with no outline.

Why is the border pure white and not a colour I choose?

White is what nearly every commercial sticker pack uses, because it reads against both the light and dark chat themes and against every bubble colour in between. Newly created border pixels are written as fully opaque white; your subject's own pixels are copied through completely untouched, so the outline never tints the photo itself.

Why is my subject padded with empty space instead of filling the square?

Because the fit scales the longer edge to 512 and centres the result, padding the shorter edge with transparency rather than cropping. A sticker subject has already had its background removed, so cropping to fill the square would risk cutting off an ear, a paw or a raised hand. The transparent padding is invisible in a chat, whereas a clipped subject is not.

What happens if my photo is much smaller than 512 pixels?

It is scaled up to fill the frame rather than left small in the middle of an empty canvas. A real sticker is expected to occupy most of its square, so a shrunken subject would look broken, while a slightly soft one just looks like a small photo. If your source is very small, expect visible softness and consider running it through the upscaler first.

Why does the cutout leave rough edges around hair?

The background removal uses the same on-device segmentation model as our background remover, and fine wispy hair against a similar-coloured background is its hardest case. The border step then hardens every edge by treating any pixel above half alpha as subject and everything below it as background, which produces a clean single-width outline but cannot recover detail the model did not find. A photo with a clear subject and a contrasting background gives the best result.

Should I export WebP or PNG?

WebP is WhatsApp's own native sticker format and the better default, since it is smaller with no visible loss on flat-edged artwork like this. Choose PNG when a Telegram pack tool or a Discord emoji uploader specifically wants PNG. Both keep full transparency outside the border, and note that neither export is checked against any file-size ceiling a third-party pack app might impose.

Related tools