Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the smallest valid jpeg file size (in bytes)

Tags:

image

jpeg

I'd like to screen some jpegs for validity before I send them across the network for more extensive inspection. It is easy enough to check for a valid header and footer, but what is the smallest size (in bytes) a valid jpeg could be?

like image 390
twk Avatar asked Feb 12 '10 16:02

twk


People also ask

What is the minimum size of JPEG image?

Although this is slightly smaller than the 125 byte arithmetic encoding given in another answer, the arithmetic encoding without the JFIF header would be smaller yet (107 bytes), so that should still be considered the smallest known.

Which image file size is the smallest?

Finally, the JPEG image (. jpg) is the smallest image and is a full 24 bit color image but it is compressed using a lossy compression scheme.

What size are JPEG files?

JPEG/JFIF supports a maximum image size of 65,535×65,535 pixels, hence up to 4 gigapixels for an aspect ratio of 1:1. In 2000, the JPEG group introduced a format intended to be a successor, JPEG 2000, but it was unable to replace the original JPEG as the dominant image standard.


1 Answers

A 1x1 grey pixel in 125 bytes using arithmetic coding, still in the JPEG standard even if most decoders can't decode it:

ff d8 : SOI ff e0 ; APP0  00 10  4a 46 49 46 00 01 01 01 00 48 00 48 00 00 ff db ; DQT  00 43  00  03 02 02 02 02 02 03 02  02 02 03 03 03 03 04 06  04 04 04 04 04 08 06 06  05 06 09 08 0a 0a 09 08  09 09 0a 0c 0f 0c 0a 0b  0e 0b 09 09 0d 11 0d 0e  0f 10 10 11 10 0a 0c 12  13 12 10 13 0f 10 10 10 ff c9 ; SOF  00 0b  08 00 01 00 01 01 01 11 00 ff cc ; DAC  00 06 00 10 10 05 ff da ; SOS  00 08  01 01 00 00 3f 00 d2 cf 20 ff d9 ; EOI 

I don't think the mentioned 134 byte example is standard, as it is missing an EOI. All decoders will handle this but the standard says it should end with one.

That file can be generated with:

#!/usr/bin/env bash printf '\xff\xd8' # SOI printf '\xff\xe0' # APP0 printf  '\x00\x10' printf  '\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x48\x00\x48\x00\x00' printf '\xff\xdb' # DQT printf  '\x00\x43' printf  '\x00' printf  '\x03\x02\x02\x02\x02\x02\x03\x02' printf  '\x02\x02\x03\x03\x03\x03\x04\x06' printf  '\x04\x04\x04\x04\x04\x08\x06\x06' printf  '\x05\x06\x09\x08\x0a\x0a\x09\x08' printf  '\x09\x09\x0a\x0c\x0f\x0c\x0a\x0b' printf  '\x0e\x0b\x09\x09\x0d\x11\x0d\x0e' printf  '\x0f\x10\x10\x11\x10\x0a\x0c\x12' printf  '\x13\x12\x10\x13\x0f\x10\x10\x10' printf '\xff\xc9' # SOF printf  '\x00\x0b' printf  '\x08\x00\x01\x00\x01\x01\x01\x11\x00' printf '\xff\xcc' # DAC printf  '\x00\x06\x00\x10\x10\x05' printf '\xff\xda' # SOS printf  '\x00\x08' printf  '\x01\x01\x00\x00\x3f\x00\xd2\xcf\x20' printf '\xff\xd9' # EOI 

and opened fine with GNOME Image Viewer 3.38.0 and GIMP 2.10.18 on Ubuntu 20.10.

Here's an upload on Imgur. Note that Imgur process the file making it larger however if you download it to check, and as seen below, the width=100 image shows white on Chromium 87:

like image 138
matja Avatar answered Oct 05 '22 17:10

matja