Most upload forms report every failure with the same sentence. That single message is hiding at least four different checks, and the fix for each is different.
Check one: the byte limit
The most common cap, and the only one people usually think about. It is measured in bytes, not megapixels, so a small-looking image straight from a modern phone can easily fail it.
Fix it by compressing to a number below the stated cap — not exactly at it. Some systems measure the encoded request rather than the file, and an upload that is base64-encoded on the way out is about a third larger than the file on disk. Aiming a few per cent under the cap costs you almost nothing and removes the whole question.
Check two: the dimension limit
Separate from file size, and frequently undocumented. A form may demand a photo no wider than 1200 pixels regardless of how small the file is. Compressing harder will never satisfy it — you have to resize. If the form states a display size, it usually also enforces a maximum near it.
Check three: the MIME type
Servers that are careful do not trust the file extension; they read the first few bytes and
identify the format from its signature. Rename a PNG to .jpg and a strict server still sees a
PNG, because that is what the bytes say.
This is why converting matters and renaming does not. It is also why a file exported from a design tool as “JPEG” can fail: some exporters write a variant the server’s library refuses.
Check four: colour space and encoding variant
Rarer, but real. CMYK JPEGs, 16-bit PNGs and progressive JPEGs are all valid files that some older server-side libraries reject outright.
Re-encoding fixes the ones it can reach. ToolZool decodes to plain 8-bit pixels and writes baseline JPEG by default, so a 16-bit PNG comes back as 8-bit and a progressive JPEG comes back as baseline — both of which are the variants a fussy server is most likely to accept. A CMYK JPEG is the awkward case: it is a print-workflow file rather than a web one, and the reliable fix is to export it again as RGB from whatever produced it.
How to tell them apart
Try a deliberately tiny test image: a few kilobytes, a few hundred pixels, plain baseline JPEG. If that uploads, the problem is in your file and you now know which axis to change — start with the compressor, and if the limit is a tight one, hitting a 50 KB limit covers the order to change things in. If the test image also fails, the problem is the form, the session or the browser, and no amount of re-encoding will help.

