Converting out of JPG, and turning a pile of them into an animation
PNG, GIF or WebP from a single photograph — or one animated GIF assembled from the whole batch.
4 min read
Three destinations, three different jobs
This tool only accepts JPEG, and that narrowness is the feature. Where it sends the picture next is a real choice with consequences, and each target is encoded on its own terms rather than through one generic writer.
The orientation tag is applied on every route. A JPEG can carry one and PNG has no equivalent field to pass it along in, so a photograph that looked upright before conversion would otherwise arrive on its side afterwards — with nothing in the new file to explain why.
- PNG
- Lossless, written at the highest compression setting. The result is usually much larger than the JPEG it came from, because a photograph is exactly what lossless compression is bad at.
- GIF
- Limited to 256 colours by the format itself, so a photograph has to be quantised. Dithering is applied, which trades a fine speckle for the wide flat bands you would otherwise get across a sky.
- WebP
- Usually the sensible one. Adjustable quality, encoded at high effort, and typically smaller than the source JPEG at a quality nobody notices the difference at.
Several photographs, one animation
The other mode takes the whole selection and produces a single animated GIF. It is the only tool here that folds many files into one output, which is why it runs as a task-level job rather than the per-file kind everything else uses.
Frames are normalised before anything is encoded. A GIF has one canvas for the entire animation, so photographs of different sizes are not merely untidy — the encoder refuses them outright. Each frame is fitted onto the first frame's dimensions and padded rather than stretched, so nothing is distorted to make it match.
You control the delay between frames, from ten milliseconds up to ten seconds, and how many times it loops, where zero means forever. Dragging the thumbnails into a different order changes the playback order; leave them alone and it is the order you added them in.
Why the palette is built twice
The animation is encoded in two passes. The first looks at every frame and builds one 256-colour palette for the whole sequence; the second maps the frames onto it.
Letting the encoder choose a palette per frame instead is faster and produces the muddy, shifting, banded animations that give GIF its reputation. Colours drift between frames because each one was optimised in isolation, and the eye reads the drift as flicker.
The palette generator is deliberately told to weigh every frame equally rather than to concentrate on what changes between them. That second mode suits screen recordings, where most of the picture repeats; a set of unrelated photographs is the case it handles worst.
The limits worth knowing
Thirty files per task, fifty megabytes each, two hundred in total. For an animation those are frames, so thirty is the ceiling on length — at the default fifth-of-a-second delay that is about six seconds.
The animation path needs a video encoder installed on the server. Where it is missing, the request fails with a message that says so rather than a generic error, because "we cannot do this here" and "your files are wrong" deserve different answers.
Frequently asked questions
- Why is my PNG bigger than the JPEG it came from?
- Because PNG is lossless. The JPEG threw away detail to get small; the PNG has to record everything that survived, including the compression artefacts, exactly. Converting to PNG restores no quality — it only stops any more from being lost.
- Can I convert a PNG here?
- No, and the check is on the bytes rather than the name, so renaming it does not help. This tool goes one direction only. To arrive at a JPG from another format, use the converter that runs the other way.
- Why do some animation frames have empty space around them?
- Because they were not all the same shape. Every frame is fitted onto the canvas the first photograph set, and whatever is left over is padded rather than stretched — distorting people to fill a rectangle is the worse of the two failures. Crop the set to one ratio beforehand if you want each frame to fill the canvas.