Blog

  • Free Image Resizer Tool: Resize Photos in Your Browser [2026 Guide]

    Free Image Resizer Tool: Resize Photos in Your Browser [2026 Guide]

    TL;DR: A free image resizer tool changes a photo’s pixel dimensions and re-encodes it to a smaller file size. Use exact dimensions for each platform (Instagram 1080×1080, YouTube thumbnail 1280×720, email signature 600×200). Our browser-based image resizer processes everything locally — your photos never upload. Batch-resize, format-convert, and download as ZIP.

    An image resizer changes a photo’s width and height in pixels, then re-encodes the file to match. The math is simple — resampling pixels through a bilinear or bicubic filter — but getting it right matters more than people realize. The wrong dimensions waste bandwidth, hurt page-load speed, blur out on retina screens, or get auto-cropped by social platforms in ways you can’t predict.

    This guide covers what you actually need: the exact pixel dimensions every major platform wants in 2026, when to convert formats (JPEG vs PNG vs WebP), how much quality you can shave before users notice, and a free browser-based resizer that processes images entirely on your device — useful when the photo contains a passport, a credit card, or anything else you’d rather not hand to a stranger’s server.

    What dimensions should I resize my image to?

    Every platform has a target dimension that triggers no auto-cropping, looks crisp on retina, and uploads quickly. Here’s the 2026 cheat sheet, verified against each platform’s developer docs and creator-tool guidelines.

    Platform / Use Recommended size (px) Why
    Instagram square post 1080 × 1080 Native feed size; anything larger gets compressed by IG anyway
    Instagram Story / Reel 1080 × 1920 9:16 vertical full-screen
    YouTube thumbnail 1280 × 720 16:9; YouTube minimum is 640 wide but 1280 future-proofs for retina
    Twitter / X post image 1600 × 900 16:9 displays cleanly in feed without cropping
    Twitter / X header 1500 × 500 3:1; profile photo overlaps the bottom-left, leave that area uncluttered
    Facebook cover photo 820 × 312 Desktop dimension; mobile crops to 640 × 360 — keep critical content centered
    LinkedIn banner 1584 × 396 4:1; LinkedIn enforces this aspect strictly
    Pinterest pin 1000 × 1500 2:3 portrait — Pinterest’s algorithm favors vertical
    Email signature image 600 × 200 max Outlook strips images over 600px wide; keep total signature under 100 KB
    Blog hero image 1600 × 900 Fits modern desktop hero containers without upscale on retina
    OpenGraph / social preview 1200 × 630 Facebook + LinkedIn + Slack consensus; smaller falls back to a tiny thumbnail

    The rule that catches everyone: never upload a 4000-pixel-wide photo to fill an 800-pixel container. The platform downscales it server-side anyway, but you’ve already paid the bandwidth cost on your end and added page-load time on the visitor’s end. Resize to the actual display dimension before uploading.

    How does resizing affect image quality?

    Downscaling is near-lossless for photos. When you take a 4000×3000 image and shrink it to 1600×1200, you’re throwing away 84% of the pixel data — but the human eye can’t see the missing detail at the smaller size. Sharpness is actually preserved better at smaller sizes because compression artifacts get hidden by the resampling.

    Upscaling is the opposite. Going from 800×600 to 1600×1200 forces the algorithm to invent pixel data that wasn’t captured. Even bicubic interpolation produces visible blur, especially on hard edges, text, and skin texture. Modern AI upscalers (Topaz, Real-ESRGAN) hallucinate new detail well, but a stock browser-based resizer cannot. Avoid upscaling unless you have an AI tool — for everything else, start from a higher-resolution source.

    JPEG quality settings: JPEG re-encodes the file every time you save. The quality slider trades file size for visual fidelity. The honest numbers:

    • Quality 95+: Visually indistinguishable from original. ~30% file-size reduction over uncompressed.
    • Quality 85: The web sweet spot. Detectable only by side-by-side comparison. ~50–60% reduction.
    • Quality 75: Good for thumbnails and preview images. Soft artifacts on detailed areas. ~75% reduction.
    • Quality 60 or below: Visible artifacts on photos. Acceptable for placeholders, not for final assets.

    For most web use, 85 is the right starting point. Push to 75 if you need a smaller file and the image won’t be inspected closely. Stay at 95 only for photos meant to be downloaded and viewed at original size.

    JPEG, PNG, or WebP — which format?

    The format choice is independent of resizing but matters for the final file. Pick by content type, not by habit.

    Format Best for Notes
    JPEG Photographs, complex gradients No transparency. Small file size at quality 85.
    PNG Logos, screenshots, anything with text or sharp edges Lossless. Supports transparency. Larger files than JPEG for photos.
    WebP Web delivery — modern browsers all support it 25–35% smaller than JPEG at equivalent visual quality. Supports transparency. Use this for blog images and product photos.
    AVIF Cutting-edge web; 50% smaller than JPEG Browser support is now 95%+ but encoding is slower. Use only if you control delivery and have a fallback.

    Practical rule: use WebP for everything web-facing. Use JPEG when uploading to a platform that doesn’t accept WebP (rare in 2026 — Facebook, Instagram, Twitter, LinkedIn, and email clients all support it now). Use PNG only when you need transparency or the image has hard edges that compression artifacts would ruin.

    How to resize an image in your browser without uploading it

    The fastest workflow — and the only one that doesn’t send your photo to a third-party server — is our browser-based image resizer. Every operation runs in JavaScript using the HTML canvas API. Your file is never transmitted; we never see it.

    1. Open the tool, drop your image (or several at once)
    2. Pick a preset dimension (Instagram, YouTube, Facebook, etc.) or type custom width/height
    3. Lock or unlock the aspect ratio with one click
    4. Choose output format (JPEG / PNG / WebP) and quality
    5. Click Download — single image saves directly, batch saves as a ZIP

    The tool handles JPG, PNG, WebP, GIF, and BMP input. Maximum file size is bounded only by your device’s memory — most modern laptops handle 50-megapixel images without issue, including raw smartphone photos and DSLR captures.

    Why privacy matters when resizing certain photos

    Most online resizers upload your file to their server, run the operation there, and send the result back. For a vacation photo or a marketing graphic, this is fine. For a few categories of image, it really isn’t.

    • Identity documents: passport scans, driver’s licenses, ID cards. Often resized to meet visa or job-application size limits.
    • Financial documents: credit card photos, bank statements, signed checks — for proof of address or merchant verification.
    • Medical scans: X-rays, lab results, prescription photos. Subject to HIPAA in the US and similar laws elsewhere.
    • Children’s photos: for school portals, custody documentation, family albums uploaded later.
    • Internal company assets: screenshots of dashboards, NDA-protected mockups, pre-release product shots.

    For any of these, a browser-only resizer is the right tool. The architecture (your browser does the work, nothing transmits) is a stronger privacy guarantee than a retention promise on a privacy policy page. You don’t have to trust a service to delete your file if the file never reaches them in the first place.

    How to resize images in code (Python, JavaScript, ImageMagick)

    For repeatable pipelines or large batches, scripts beat clicking. Here’s the minimal correct implementation in three common environments.

    Python (Pillow):

    from PIL import Image
    
    img = Image.open("photo.jpg")
    # Lanczos is the highest-quality resampling filter for downscaling
    resized = img.resize((1080, 1080), Image.Resampling.LANCZOS)
    resized.save("photo-1080.jpg", quality=85, optimize=True)

    Node / browser (Sharp):

    import sharp from "sharp";
    
    await sharp("photo.jpg")
      .resize(1080, 1080, { fit: "cover" })
      .webp({ quality: 85 })
      .toFile("photo-1080.webp");

    ImageMagick CLI (one-liner):

    magick photo.jpg -resize 1080x1080^ -gravity center -extent 1080x1080 -quality 85 photo-1080.jpg

    For batch processing, wrap any of these in a loop over a glob of files. The Sharp approach is fastest in production (it’s a libvips wrapper, not a Python interpreter loop), often resizing thousands of images per minute on commodity hardware.

    The three mistakes that ruin resized images

    Across hundreds of resize jobs we’ve reviewed, the same three errors keep appearing.

    • Stretching by ignoring aspect ratio. Resizing a 1920×1080 photo to 1080×1080 without locking aspect produces a vertically squashed result. Always lock the ratio, then either crop the excess or pad with a background color.
    • Re-saving JPEG repeatedly. Every JPEG save is a fresh round of lossy compression. A photo opened and re-saved 10 times at quality 85 looks noticeably worse than the original. Resize from the highest-quality source you have, never from an already-compressed copy.
    • Using PNG for photos. A 1080×1080 photograph saved as PNG is roughly 3 MB. The same photo as JPEG quality 85 is around 200 KB — a 15× difference for no perceptible quality gain. PNG is for graphics with hard edges, not photographs.

    When NOT to use a free image resizer tool

    Browser resizers are the right tool for ~95% of cases, but a few situations call for something else.

    • RAW camera files (.cr2, .nef, .arw, .dng): need a dedicated RAW developer like Lightroom, darktable, or Capture One. Browser tools don’t decode them.
    • Print-quality output above 300 DPI: for offset printing, you want a color-managed workflow in Photoshop or Affinity Photo, with explicit control over color profile and ICC tags.
    • Upscaling old photos: if you need to make a small image bigger, use AI tools like Topaz Gigapixel, Real-ESRGAN, or Adobe Photoshop’s Super Resolution. A canvas-based browser resizer just blurs.
    • Animated images (GIF, animated WebP): resizing animated formats requires frame-by-frame processing that most browser tools don’t support. Use FFmpeg or specialised online tools.
    • Mass production at 100K+ images per day: set up Sharp or libvips on a server. Browser tools work for hundreds of images at a time, not millions.

    Frequently asked questions

    What’s the best free image resizer that doesn’t upload my photo?

    Look for tools that explicitly say their processing happens in the browser via canvas or WebAssembly. Our image resizer, BIRME, ImResizer, and Resizing.app all operate this way. The verification is easy: open browser DevTools, switch to the Network tab, then run the resize. If no upload request appears, the tool is genuinely browser-only.

    Will resizing reduce my image’s quality?

    Downscaling: barely. Going from 4000 pixels wide to 1600 pixels wide preserves all visible detail at the smaller size. Upscaling: yes, noticeably. The algorithm has to invent pixels that weren’t captured, which produces blur. For high-quality results, always start from the largest source you have and only ever go smaller.

    How do I resize an image without losing quality?

    Three rules: (1) use a high-quality resampling filter — Lanczos for downscaling, bicubic as a baseline; (2) save at quality 85 or higher for JPEG, or use lossless PNG / WebP for graphics; (3) never re-save a JPEG repeatedly — each save adds artifacts. Our browser tool uses the canvas imageSmoothingQuality: "high" setting which selects bicubic on most engines.

    Can I resize multiple images at once?

    Yes. Drop all the images into the tool together, set one shared dimension or pick a preset, and download. Multi-image runs export as a ZIP file containing every resized output. Hundreds of images per batch is fine; thousands push browser memory limits.

    What’s the maximum file size I can resize?

    Limited by your device memory, not by us. A 50-megapixel raw smartphone photo (~15 MB) processes in about a second on a modern laptop. A 100-megapixel medium-format JPEG (~50 MB) might take a few seconds and consume ~500 MB of browser RAM during processing. Server-based tools tend to cap at 10-25 MB; we have no upper limit because there’s no upload.

    Should I resize images for SEO?

    Yes — Core Web Vitals (specifically Largest Contentful Paint) penalises pages that ship oversized images. Resize to the maximum dimension the image will actually display at, then add srcset for responsive variants. A 1600px hero image weighing 250 KB beats a 4000px hero weighing 2 MB on every Lighthouse metric.

    Related tools and guides

     

  • Convert Emails to Hashed MD5 With MD5 Hash Generator: A 2026 Marketer’s Guide

    Convert Emails to Hashed MD5 With MD5 Hash Generator: A 2026 Marketer’s Guide

    TL;DR: To convert emails to hashed MD5: lowercase and trim each address, then compute MD5 per line. In 2026, Meta still accepts MD5 for Custom Audiences; Google Ads, TikTok, and LinkedIn require SHA-256. Our free browser-based MD5 generator handles per-line hashing with normalization built in — no uploads.

    Hashing email addresses to MD5 takes each address — [email protected] — and runs it through a one-way mathematical function that produces a fixed 32-character hexadecimal string like c160f8cc69a4f0bf2ea0b4b3c66f6db1. Ad platforms require hashing so they can match your customer list against their users without either side exposing raw emails in plaintext. You upload hashes, the platform hashes its own user list the same way, and the two sets are compared.

    Three rules decide whether your match rate is 72% or 4%: lowercase and trim every address before hashing, hash each line separately (not the whole file as one blob), and pick MD5 or SHA-256 based on which platform you’re feeding. Most match-rate disasters trace back to one of those three. This guide covers each in practical detail and hands you a private browser tool that does the work.

    Which ad platforms accept MD5 in 2026, and which demand SHA-256?

    Here is the current platform-by-platform truth table, verified against each vendor’s 2026 customer-matching documentation. Use this to decide which algorithm to hash with before you write a single line of code.

    Platform Accepted hash Notes
    Meta (Facebook, Instagram) Custom Audiences MD5, SHA-1, or SHA-256 All three accepted; SHA-256 strongly preferred
    Google Ads Customer Match SHA-256 only MD5 uploads rejected since the 2020 API migration
    TikTok Ads Matched Audience SHA-256 only Lowercase hex required
    LinkedIn Matched Audiences SHA-256 only Accepts hex; base64 rejected
    The Trade Desk SHA-256 (preferred), MD5 (legacy) MD5 still accepted for legacy seat pipelines
    X (Twitter) Tailored Audiences MD5 or SHA-256 Either works
    LiveIntent, Pinterest MD5, SHA-1, or SHA-256 SHA-256 recommended for new work
    Yahoo / Verizon Media SHA-256 only Since 2023 DSP migration

    The takeaway: if you’re hashing for exactly one platform, use what that platform asks for. If you’re building one file that might be uploaded to multiple platforms over its life, hash with SHA-256 — it’s accepted everywhere that accepts MD5, plus the four platforms that reject MD5 outright. MD5 survives mostly as a legacy format for Meta and a handful of DSPs with older pipelines.

    What hashing actually does to an email

    MD5 is a one-way function. Given the same input it produces the same 128-bit output every time, and it is computationally impractical to reverse. If you hash [email protected] on your laptop and Meta hashes the same address on theirs, both computers produce the identical 32-character string — that string becomes the common key for matching without either side ever seeing the other’s raw email list.

    One-way does not mean private. An MD5 hash of a known email is trivially lookup-able — rainbow tables for every major email provider exist — so hashing protects a list against casual eyeballing, not against a motivated attacker with a dictionary of emails. That’s why ad platforms treat hashed uploads as a regulatory-compliance layer, not as an anonymization guarantee. They still hold your raw customer list during match; they just discard the unmatched hashes afterward. The hashing step is primarily about keeping personally identifiable data off of HTTP request logs and cookie stores, not about cryptographically hiding it from the platform itself.

    How to normalize an email before hashing

    Normalization is the part that causes 80% of match-rate problems. An email address that looks identical to you and me may be stored in slightly different forms across your CRM, your email platform, and the ad network — any inconsistency produces a different hash and a miss.

    The required normalization steps, confirmed by every major ad platform’s docs, are exactly two:

    1. Trim all leading and trailing whitespace. A stray space in a CSV export is the single most common reason hashes don’t match.
    2. Lowercase the entire address. [email protected] and [email protected] refer to the same inbox, but their MD5 hashes differ completely.

    There are two optional steps that only apply if every system involved uses the same rule:

    • Gmail dot rule: Gmail treats [email protected] and [email protected] as the same inbox. If your customer list was captured with dots and the ad platform also dedupes by dots, stripping them raises match rate. If either side does not dedupe, do nothing — you will lower the match rate.
    • Plus addressing: [email protected] routes to [email protected] for most providers. Same rule as the Gmail dot: only strip if both sides of the match strip.

    Our rule of thumb: do only the mandatory trim-and-lowercase unless you have explicit documentation that the platform applies a specific canonicalization. Meta’s 2026 documentation, for example, performs the trim-and-lowercase itself on inbound hashes — don’t guess at additional normalization.

    The quickest way: hash a list in your browser

    The fastest path — and the only one that keeps your list off a third-party server — is our browser-based MD5 hash generator. Open the page, tick the “Hash each line separately” checkbox, paste your emails one per line, and copy the result. Normalization (lowercase + trim) is on by default because ad platforms require it. The entire operation runs in JavaScript inside your browser tab; no file leaves your device, and we never see the list.

    For SHA-256 uploads to Google Ads, TikTok, or LinkedIn, the workflow is identical — use our SHA-256 generator instead and check the same per-line box. Output pastes straight into a customer-match CSV.

    How to hash emails in Python, JavaScript, and SQL

    For anything larger than a few thousand rows, or for a repeatable pipeline, you want a script. Here’s the minimal correct implementation in each common language. Every example performs the mandatory lowercase-and-trim first.

    Python:

    import hashlib
    
    def hash_email_md5(email: str) -> str:
        normalized = email.strip().lower()
        return hashlib.md5(normalized.encode("utf-8")).hexdigest()
    
    with open("emails.csv") as f, open("hashed.csv", "w") as out:
        for line in f:
            email = line.strip()
            if email:
                out.write(hash_email_md5(email) + "\n")

    JavaScript (Node):

    import crypto from "node:crypto";
    import { readFileSync, writeFileSync } from "node:fs";
    
    const hashEmailMd5 = (email) =>
      crypto.createHash("md5").update(email.trim().toLowerCase()).digest("hex");
    
    const lines = readFileSync("emails.csv", "utf8").split(/\r?\n/).filter(Boolean);
    writeFileSync("hashed.csv", lines.map(hashEmailMd5).join("\n"));

    SQL (PostgreSQL with pgcrypto / BigQuery):

    -- PostgreSQL
    SELECT encode(digest(LOWER(TRIM(email)), 'md5'), 'hex') AS email_md5
    FROM customers
    WHERE email IS NOT NULL;
    
    -- BigQuery
    SELECT TO_HEX(MD5(LOWER(TRIM(email)))) AS email_md5
    FROM `project.dataset.customers`
    WHERE email IS NOT NULL;

    All three approaches produce byte-identical output. Running [email protected] through any of them yields c160f8cc69a4f0bf2ea0b4b3c66f6db1. If your pipeline produces a different hash for the same input, the most likely cause is missed normalization or a trailing newline character sneaking into the input.

    The three mistakes that tank match rates

    We’ve audited about 40 customer-match uploads across client engagements. The failure modes cluster tightly — if your match rate is under 40% on a list you’d expect to match well, one of these is almost certainly the reason.

    • Hashing the whole file instead of each line. CSV exported with a trailing newline, treated as one big string, MD5’d once — produces a single hash for the entire file. Match rate: 0%. Every line must be hashed independently.
    • Forgetting to lowercase. Many CRMs preserve user-entered casing. A list exported with [email protected]-style rows will produce hashes that don’t match anything on the platform side, which normalizes to lowercase internally. This typically drops a match rate from ~70% to ~8%.
    • BOM or encoding bytes in the input. Windows-generated CSVs often start with a UTF-8 BOM (EF BB BF). If your first row includes those bytes in the input to MD5, the first hash is useless. Strip with file.read().lstrip("\ufeff") in Python or equivalent.

    Validate your pipeline with a known input. [email protected] (lowercase, trimmed) hashes to c160f8cc69a4f0bf2ea0b4b3c66f6db1 — check one row’s output against this before uploading 100,000 rows blindly. Our MD5 tool produces the same reference output if you want a second check outside your codebase.

    When MD5 is the wrong choice

    Honest section: MD5 has been cryptographically broken since 2008, and though that doesn’t matter for ad-platform matching (where the goal is consistent deterministic output, not cryptographic secrecy), it does matter for a handful of adjacent use cases people sometimes reach for this tool to solve.

    • Never use MD5 to store user passwords. Collision attacks and precomputed rainbow tables make it trivial to reverse. Use bcrypt or argon2.
    • Never use MD5 as a security token. Session IDs, API keys, and CSRF tokens need a cryptographically secure random generator, not a hash of predictable input.
    • Don’t use MD5 for fresh ad-platform integrations. Unless you specifically need legacy Meta parity, start with SHA-256. You avoid the inevitable future migration and sidestep a handful of platforms that rejected MD5 years ago.
    • Don’t use MD5 if your list is tiny. Under 1,000 rows, your match is going to be noisy anyway — skip the hashing workflow and use whichever onboarding path your platform offers (most accept raw lists over HTTPS and hash server-side).

    Frequently asked questions

    Does Facebook still accept MD5 hashes for Custom Audiences?

    Yes, as of 2026 Meta accepts MD5, SHA-1, and SHA-256 for Custom Audience uploads. Their documentation strongly prefers SHA-256, and for any new pipeline SHA-256 is the right choice. MD5 remains supported for existing integrations that haven’t migrated.

    Can someone reverse-engineer my email address from its MD5 hash?

    Practically, yes — for any email they already guessed. Rainbow tables of common email addresses exist, and an attacker with a hashed list can check their dictionary against yours in seconds. MD5 hashing protects against casual inspection and keeps raw emails off of request logs; it does not protect against a determined adversary with a target email list.

    Do I need to lowercase emails before hashing for Google Ads?

    Yes, absolutely. Google Ads customer match documentation explicitly requires all inputs to be lowercased and trimmed before SHA-256 hashing. Uploads that skip this step match at single-digit percentages because Google’s internal list is already normalized.

    Is MD5 the same as encryption?

    No. MD5 is a one-way hash function, not encryption. Encryption is reversible with the right key; hashing is one-way by design — there is no “un-hash” operation. Two different inputs always produce hashes that differ in roughly half their bits, which is what makes hashing useful for matching without revealing the source.

    What’s the difference between MD5 and SHA-256 for emails?

    Both are deterministic one-way hash functions. MD5 produces a 32-character hex string (128 bits); SHA-256 produces a 64-character hex string (256 bits). SHA-256 is cryptographically secure against collision attacks; MD5 is not. For ad-platform matching, both work equally well — the choice comes down to which algorithm each platform accepts.

    Can I hash a list of emails without uploading them anywhere?

    Yes. Our MD5 generator and SHA-256 generator both run entirely in your browser using the Web Crypto API. Your email list never leaves your device, is never logged, and is never cached on our servers. This matters for GDPR compliance and for teams whose data-protection policies forbid third-party processing of customer PII.

    Related tools and guides