Social-media post sizing
Got a horizontal phone photo and need a 1:1 Instagram post? Snap to 1:1, drag to centre the subject, download. The 4:5 portrait, 9:16 Stories, and 16:9 YouTube presets cover the rest.
Drag to crop, snap to standard aspect ratios (1:1, 4:5, 16:9, 9:16, …), rotate and flip, export as PNG / JPG / WebP. All in your browser — no upload, no sign-up.
Instagram square post: 1:1. Instagram portrait post: 4:5. Instagram / Facebook / TikTok / YouTube Stories: 9:16. YouTube video thumbnail: 16:9 (1280×720 minimum). X (Twitter) post image: 16:9 or 1:1. LinkedIn post: 1.91:1 (close to 16:9). DSLR / phone camera photo: 3:2. Classic 35 mm or older digital: 4:3.
Yes. The on-screen canvas is scaled down for display, but the crop math runs on source-coordinate space (original pixels). When you click Download, the export canvas is sized at exactly the cropped pixel dimensions of the source — no quality loss from on-screen scaling. A 4000×3000 source cropped to a 1000×1000 square exports as a 1000×1000 image at full quality.
Every dimension you'll actually need, every transform you'll actually use — no Photoshop required.
Drag any of the 8 corner / edge handles to resize the crop box, or drag the box itself to reposition. A rule-of-thirds grid overlay helps composition.
Snap to 1:1 (square / IG / profile), 4:5 (IG portrait), 9:16 (Stories / Reels / TikTok), 16:9 (YouTube), 3:2 / 2:3 (DSLR), 4:3 (classic), or-form. Corner handles preserve the locked ratio while you resize.
Rotate 90° left / right and flip horizontally / vertically with one click. Transforms apply before the crop, so the box you drew stays accurate.
Save as PNG (lossless), JPG (with quality 50–100% slider), WebP (best compression, ~30% smaller than JPG at the same visual quality), or keep the input format.
Every byte stays on your device. The image is decoded in the browser, cropped on a canvas, exported with canvas.toBlob. Open DevTools → Network and you'll see zero outbound requests.
Pure JavaScript, no framework runtime. Cold load is under 25 KB gzipped. Cropping a 4000 × 3000 pixel image and exporting takes under 200 ms.
Four steps from drop to download.
Drag any image file (JPG, PNG, WebP, AVIF, GIF, BMP) onto the drop zone, click Choose file, or just paste from your clipboard with Ctrl/Cmd+V. The image decodes locally in your browser — nothing uploads.
Choose a preset that matches where you'll use the image — 1:1 for Instagram square, 4:5 for IG portrait, 9:16 for Stories / Reels / TikTok, 16:9 for YouTube, 3:2 for a DSLR-shaped photo. Or stay on "" for any custom ratio.
Drag the 8 corner / edge handles to resize the crop box, or drag the box itself to reposition. The rule-of-thirds grid overlay helps you compose. With an aspect ratio locked, corner handles preserve the ratio automatically. Use Rotate / Flip if the source is upside-down or mirrored.
Pick the output format — keep the input format, or convert to PNG (lossless), JPG (quality 50–100% slider), or WebP (smaller than JPG at the same visual quality). Click Download and the file is saved at full source resolution — no quality loss from the on-screen preview.
Four common scenarios where a privacy-first browser cropper beats opening Photoshop.
Got a horizontal phone photo and need a 1:1 Instagram post? Snap to 1:1, drag to centre the subject, download. The 4:5 portrait, 9:16 Stories, and 16:9 YouTube presets cover the rest.
Most platforms force 1:1. Snap to square, position the subject's face in the upper third (better than dead-centre), download. The result fits LinkedIn, Twitter / X, GitHub, Slack, Discord, and corporate intranets.
E-commerce platforms want consistent ratios — Shopify, Etsy, Amazon, Shopee all prefer 1:1 or 4:5. Crop a batch of phone shots to the platform's required ratio with the rule-of-thirds grid for composition consistency.
Phone screenshots include status bars, navigation chrome, and app overflow. Drop the screenshot in, drag the crop box to keep just the content, download as PNG (lossless) for crisp UI screenshots without re-compression artifacts.
Photos and screenshots never leave your device. Open DevTools → Network and you'll see zero outbound requests during cropping, transformation, or download.
Hand-picked reads on social media sizes, photo composition, and image privacy.
Every platform's required dimensions in one cheatsheet. Plus the aspect ratios that work without cropping on each.
A working photographer's guide to composition. Worked examples for portraits, landscapes, product shots, and social posts.
Instagram square post: 1:1. Instagram portrait post: 4:5. Instagram / Facebook / TikTok / YouTube Stories: 9:16. YouTube video thumbnail: 16:9 (1280×720 minimum). X (Twitter) post image: 16:9 or 1:1. LinkedIn post: 1.91:1 (close to 16:9). DSLR / phone camera photo: 3:2. Classic 35 mm or older digital: 4:3.
Yes. The on-screen canvas is scaled down for display, but the crop math runs on source-coordinate space (original pixels). When you click Download, the export canvas is sized at exactly the cropped pixel dimensions of the source — no quality loss from on-screen scaling. A 4000×3000 source cropped to a 1000×1000 square exports as a 1000×1000 image at full quality.
Phone cameras embed an EXIF orientation tag rather than rotating the actual pixels. Some browsers (including older Safari) apply this automatically; others don't. If your image looks sideways, click the Rotate button — the cropper will use the correctly-oriented version for the crop and export.
Yes. JPG is a lossy format, so any save through canvas.toBlob('image/jpeg') involves re-encoding. We default to quality 92% (visually indistinguishable from the source for most photos). If you need perfect bit-for-bit fidelity, choose PNG as the output format (lossless), or WebP for ~30% smaller files at the same visual quality.
No. The file is read with FileReader, decoded into a browser Image, drawn on a canvas, and exported with canvas.toBlob. Every step happens in JavaScript on your device. Open DevTools → Network and you'll see zero outbound requests during cropping or download. We use one cookie for cookie-consent state and one for language preference, that's it.