Resizing a GIF means changing the pixel width and height of every visible frame in an animated GIF while keeping the order of frames, the per-frame delays, and the overall animation timing the same. The simplest way to think about it is that you set a new target width, the matching height is calculated from the original canvas ratio, and the same scale is then applied to every visible frame inside the animation. The frame delays, the loop behaviour, and the order of the animation all stay intact, so a clip that plays for three seconds before the resize still plays for about three seconds afterwards, inside a smaller or larger rectangle. This is also why resizing a GIF feels different from resizing a single JPG or a single PNG: instead of one picture, you are asking the browser to redraw dozens of frames, respect each frame's background rule, and rebuild the result as a fresh GIF file. If you want a hands-on tool that handles that for you in the current tab, the GIF Resizer page is built specifically for this task.

resize gif explained
Resize GIF Explained: How Width Changes Each Frame

What Resizing a GIF Actually Changes

When you resize an animated GIF, three things move at once and several other things stay put. The width and height in pixels are the only two numbers that change. Everything drawn inside the frame is rescaled to fit that new rectangle, with the same aspect ratio as the source canvas so nothing stretches or squashes along a single axis. The per-frame delay, which is the number of hundredths of a second each picture is shown, is read from the decoded frames and copied back into the new file, so the animation plays at the same speed.

The visible frame order is also preserved, because the export walks the decoded frames in sequence. The loop count is reset to a continuous loop, because most viewers expect an animated GIF to play forever, and the export does not preserve any finite loop count that the source may have stored. Original palette tables, comment blocks, and other GIF metadata extensions are not copied, because the export is a fresh GIF encoding rather than a byte-for-byte rewrite of the original stream. If those side properties matter to your workflow, you would need to add them back with a dedicated GIF editor after the resize.

Why Animated GIFs Are Harder to Resize Than Photos

A static JPG or PNG stores one picture. An animated GIF stores a header, a logical canvas size, and a list of image frames, and each image frame is not necessarily a complete picture. Many GIFs store a first full frame and follow it with smaller patches that update only part of the logical canvas, plus a disposal instruction that tells the next frame whether to keep the prior pixels, clear the changed rectangle, or restore an earlier canvas state before drawing the new patch.

If a tool resizes each raw patch independently, the patches stop lining up at the new canvas size, the background of a partial update can vanish, and you can see trails, holes, or transparent rectangles that were never visible in the animation as it was meant to be played. The correct order is to read every frame, follow the disposal rule to composite the complete visible canvas for each moment in time, and only after the full picture is correct, draw that complete picture onto a new canvas at the requested size. This is how the GIF Resizer works under the hood: it uses the browser's CanvasRenderingContext2D drawImage API to redraw each composited frame at the new dimensions, then assembles the new animation and exposes it as a local Blob through URL.createObjectURL.

How to Resize an Animated GIF Locally

The page exposes one geometry control on purpose. Width is enough to set the new size without stretching one axis independently, and the canvas ratio from the source is used to find a matching whole-pixel height automatically. Open the GIF Resizer in your browser, then follow these steps:

  1. Choose an animated GIF up to 20 MB and confirm the detected source canvas size that the page reports once the file is loaded.
  2. Enter the target width in whole pixels. The matching height is calculated for you from the source canvas ratio and rounded to a whole pixel.
  3. Select Resize GIF. The animation is decoded, each visible frame is composited according to its disposal rule, every complete frame is drawn at the new dimensions, a fresh palette is built for each output frame, and the new GIF is packaged into a local Blob.
  4. Use the download link shown by the page and open the result in a browser tab or your target application to watch the first cycle for timing, edge quality, and text legibility.

The page reports the actual output dimensions, the number of visible frames, and the final byte count of the new GIF, so you can see whether the result matches what you expected. If the source file has unsupported frame data, a damaged signature, or more decoded work than the browser can handle, the page shows an error and leaves no stale download in place. For a focused walk-through on keeping the animation playing normally through the resize, see how to resize a GIF file without breaking the animation.

What the GIF Resizer Keeps and What It Rebuilds

Because the export is a fresh GIF encoding, not a byte-for-byte resize of the original stream, some properties are preserved and others are rebuilt from scratch. The table below summarizes the contract that the page works against.

PropertyWhat happens
Visible frame orderPreserved. Frames play back in the same sequence as the source.
Per-frame delaysPreserved. Each frame uses the decoded delay from the source.
Transparent pixelsPreserved. GIF supports one-bit transparency and that model is kept on every output frame.
Width and heightChanged. New width is your input; height is calculated from the source ratio.
Palette tablesRebuilt. Each output frame gets a fresh palette of up to 256 colors.
Loop countReset to a continuous loop. Any finite loop count in the source is dropped.
Comment and application extensionsNot copied. The export does not preserve GIF metadata blocks.
File locationLocal. Decoding, scaling, palette encoding, and the download Blob stay in the current browser tab.

When a Resized GIF Gets Smaller, and When It Doesn't

Resizing reduces the pixel count of every frame, so the raw image data inside each frame is usually lighter. That does not guarantee a smaller file. The final byte count depends on what is in the animation, how the new palette fits the content, and how the GIF compressor packs the patches. An animation that has lots of small colour gradients can actually grow after a resize, because the fresh palette has to fit each frame's new look. A flat colour plate with a clean background will almost always shrink.

Because the result depends on the content rather than the resize itself, the right workflow is to resize first, then read the reported byte count, and only decide whether to apply a separate optimisation step afterwards. The page tells you the actual output size instead of promising a percentage drop, so you can make that call without guessing.

Picking the Right Target Width

The width input is the only number you set, so the question usually comes down to where the GIF is going to play. Some common destinations fit in this short comparison. The figures shown are typical starting widths; the exact output dimensions always depend on your source canvas ratio.

Target useTypical widthWhy this width
Documentation thumbnails160 to 240 pxSmall enough to fit beside body text without dominating the page.
Chat avatars and inline reactions64 to 128 pxCommon avatar sizes for messaging clients and small inline reactions.
Discord emoji slots32 to 128 pxDiscord reads the canvas size of the GIF rather than its byte count.
Email signatures80 to 150 pxSmall canvases render quickly and stay under most mail client data caps.
Slide decks and training docs480 to 800 pxMatches typical projected slide widths at projected slides.

Pick the width required by where the GIF will play, then let the page calculate the matching height. If the source canvas is 800 by 600 and you enter 400, the calculated height is 400 × (600 ÷ 800) = 300, so the output is 400 by 300. The height is rounded to a whole pixel, which is the smallest unit the GIF format actually stores.

The page also enforces explicit bounds that protect the browser from running out of memory. The file may be up to 20 MB, the logical canvas may be no more than 4,096 pixels on either side, the per-frame pixel count may be up to three million pixels, and the animation may contain up to 50 image frames. A file that exceeds any bound is rejected before a large output canvas is allocated, so the page never produces a partial download or freezes the tab. No account is needed, nothing is uploaded, and nothing is stored after the tab is closed.

Related reading: GIF Too Large to Send? Pull Out the Frames as PNGs.