Crop a batch of images and add a watermark

One crop frame for the whole batch, a watermark drawn after the crop so it is never cut in half, and a row of real pixel sizes to check before you download.

🔒 100% client-side · zero server upload

Watermark

The mark is drawn after the crop, so it is never cut off. Leave the text empty to save without one.

Results

    Everything runs in this browser tab. Nothing is uploaded.

    Malaysian rules & edge cases

    What "crop" means here. The frame you pick is filled by cutting pixels away from the longer side — a cover crop. Nothing is letterboxed, nothing is stretched and no background is invented. A 1600×900 banner cropped to 1:1 loses 350 px from each side; the same banner cropped to 4:5 loses more. If you wanted the whole photo inside a square with a coloured border, that is padding, which is a different tool.

    FrameTypical usePixels — longest-side preset in brackets
    1:1Shopee and Lazada listings, Instagram grid, profile pictures1080×1080 (1080)
    4:5Instagram and Facebook feed, the tallest portrait a feed allows1080×1350 (1350)
    3:4Portrait photo prints and some marketplace categories1080×1440 (1440)
    16:9Website banners, YouTube thumbnails, slide decks1920×1080 (1920)
    9:16Reels, TikTok, WhatsApp Status — full-screen vertical1080×1920 (1920)

    The order that matters. The EXIF orientation is read first and the photo is rotated upright, then the crop is taken. Doing it the other way round cuts the wrong axis: a phone photo stored 3200×2400 with orientation 6 is really a 2400×3200 portrait, so a square must come out of the upright frame — 2400×2400 starting 400 px down — not out of the stored one. The demo file on this page is exactly that photo, and its row names the crop it took.

    Size. The longest side is scaled to the preset you choose, and the tool never upscales: a 600 px product shot asked for 1080 px stays 600 px and the row says so. Anything above 16.7 megapixels is scaled into the canvas ceiling, because a bigger canvas is what kills a mobile tab.

    Watermark. Text or a logo image (PNG with transparency), at any of nine positions, sized 2–20 % of the short edge and drawn 10–100 % opaque. It is painted after the crop, so it can never be sliced by the frame. A logo, when one is loaded, takes the place of the text.

    What is lost on purpose. The image is redrawn on a canvas and encoded again, so the camera model, the GPS fix, the timestamp and the software tag are gone — which is usually the point of posting a product photo. A wide-gamut profile (Display P3, Adobe RGB) comes back as sRGB. PNG output is lossless and keeps transparency; JPEG has no alpha, so transparent pixels take the background colour you choose.

    Honest limits. WebP output needs a browser that can really encode it — Safari cannot, and asking for image/webp there silently returns a PNG, so this tool checks the type of the bytes it received and saves an honest JPEG named .jpg when it has to. AVIF is not offered at all. And a batch is one download: two or more files arrive as a single ZIP built inside the tab, because iOS blocks the second automatic download.

    Before and after

    Before

    produk-kopi-01.jpg — stored 3200×2400, EXIF orientation 6 (upright 2400×3200) — iPhone 15 Pro — GPS 3.1390, 101.6869
    banner-raya-2026.png — 2400×1350 — the wide banner a square crop has to lose pixels from
    logo-kedai-kopi.png — 600×600 with a transparent background

    After

    produk-kopi-01-1x1-1080.jpg — 1080×1080 upright, cropped from 2400×2400 — camera, GPS and date removed
    banner-raya-2026-1x1-1080.png — 1080×1080 — 525 px cut from each side, nothing stretched
    logo-kedai-kopi-1x1-600.png — 600×600 — 1:1 already, so only the transparency survives untouched

    How it works

    1. Drop your images, or press "Load sample data" for a portrait photo that really carries EXIF orientation 6 plus a camera and GPS block, a wide 2400×1350 banner, and a transparent logo.
    2. Choose the frame (1:1 for a Shopee listing, 4:5 for a feed, 9:16 for a Story), the longest side, and where the crop should start. Add a watermark text or a logo if you need one.
    3. Press Run, check each row — real output size, real pixels, what was removed — then download one image or the whole batch as a single ZIP.

    FAQ

    Are my photos uploaded to a server?

    No. Each file is read with the browser File API and redrawn on a canvas inside this tab. Open the Network panel and press Run: no request is made, which also means the GPS coordinates and the exact shooting time in a phone photo never leave your device.

    Why is the crop not where I expected?

    The "Crop from" control decides which part of the photo survives: Centre keeps the middle, Top left keeps the top-left corner, and so on. For a square from a portrait photo, Centre removes the same number of rows from the top and the bottom. Change the control and press Run again — the row shows the exact output size, so a wrong anchor is visible immediately.

    Does cropping lose quality?

    The image is decoded and encoded once, so a JPEG loses a little detail — at quality 90 it is hard to see at normal size, and repeatedly re-cropping the same file is what makes a photo visibly soft. A crop almost always produces a smaller file because fewer pixels are left; PNG output is the exception, since PNG is lossless and gets bigger.

    Where should the watermark go on a product photo?

    A corner, small — around 5–6 % of the short edge is enough to be readable without covering the product. A mark across the middle costs you clicks, and some marketplaces reject main images that carry contact details or another shop's logo, so keep a phone number out of the image itself.

    Can it add a border instead of cutting the photo?

    No, and that is deliberate. Filling a frame by cutting is what makes a 1:1 listing image look full-bleed; fitting the whole photo inside a square with a coloured background is padding, a different promise with different rules, and mixing the two in one control would make both hard to predict.