Skip to main content
Ink·tab
all tools

Exact pixel width and height

Instagram, X, OG, ID-photo presets. Originals stay in the browser.

Upload files· JPG · PNG · WebP · GIF · up to 50MB each · 50 files
Drop files here, or
Use the select-files button, or Ctrl+V to paste an image.
Preset
Width×Height
Fit
Keep ratio, fill the target and crop center.
Output
Quality85· not used for lossless PNG

When you'd use this

When you need an exact pixel width and height — Instagram upload sizes (1:1, 4:5, Story 9:16), X / Twitter posts (16:9), Open Graph cards (1200×630), or a 3×4 ID photo. Where image-compress aims at file size, this aims at dimensions.

Contain · cover · stretch

Three modes, distinguished by how they handle aspect ratio.

  • Contain — keeps the source ratio, scaled to fit within the target. A tall photo resized to 1080×1080 ends up around 810×1080 — one side shorter than the target.
  • Cover — keeps the ratio, fills the target, and crops the center to match exact dimensions. Best for portraits and centered subjects.
  • Stretch — ignores the ratio. The result has the exact target pixels but distorts when the ratios differ.

Presets

Seven common sizes are pre-loaded — Instagram 1:1, 4:5, 9:16, X / Twitter 16:9, OG 1.91:1, ID photo 3×4 (295×413), and a 256-pixel avatar. The "Custom" entry takes any width and height. Lock the ratio and changing one dimension updates the other to match the original aspect.

Local processing

Resampling runs through @jsquash/resize Lanczos3 (WASM), cropping through OffscreenCanvas. Decode, resample, crop, and encode all execute in the browser — neither the source nor the result is sent to a server. Up to 50 files can sit in the queue, and two Web Workers run in parallel so large images don't freeze the UI.

When this isn't the right tool

  • Print-resolution work — print shops usually want the untouched original or specific DPI specs. Screen-pixel resize is a different job.
  • HEIC (iPhone photos) — the browser can't decode them. Export to JPG first.
  • Animated GIFs — only the first frame survives; motion is dropped.
  • Face-centered crops — cover mode always crops the geometric center. If the face sits high in the frame, it can be clipped after the crop.

Originals stay on the page

Resampling runs through @jsquash/resize (Lanczos3) WASM, cropping through OffscreenCanvas. Both execute in the browser — neither original nor resized output is sent to a server. EXIF metadata is dropped during decode.

Frequently asked questions

Are originals uploaded anywhere?
No. Decoding and resampling run in the browser through a WASM build of @jsquash/resize (Lanczos3). Cropping uses OffscreenCanvas. Neither the original nor the result is sent to a server.
How do contain, cover, and stretch differ?
Contain keeps the source aspect ratio and fits it within the target. Cover keeps the ratio, fills the target, and crops the center to match exactly. Stretch ignores the ratio and forces the exact target dimensions.
Which presets are available?
Instagram 1:1 (1080×1080), 4:5 (1080×1350), Story 9:16 (1080×1920), X / Twitter 16:9 (1600×900), Open Graph 1.91:1 (1200×630), ID photo 3×4 (295×413), and a 256-pixel avatar. 'Custom' takes any width and height.
Can I batch many files at once?
Up to 50 in the queue, 50MB per file. Two Web Workers run in parallel so the UI stays responsive on large images. Save individually or as a single ZIP.