fileformer
search⌘KtranslateENexpand_moreupload_fileConvert
Converters8 file families · 44 direct conversions
What changes in a conversionarrow_forward

Convert JPG Image Free

Every time you save a JPG, it gets a little worse.

JPG makes photos small by throwing away detail your eye barely notices. Open it, edit it, save it again, and it throws away a little more. Your browser is re-saving the image below right now, as many times as you choose.

after 20 saves7.5 KB
lost · 8× brighteravg error 2.4
times saved20
quality each time75
Small edit between savesnudge 1 px, like a crop or rotateEach edit shifts the picture against the 8 × 8 grid, so every save is compressing fresh detail. Push the slider further and it compounds.
~/eight-by-eight

Look closely and a JPG is made of 8 × 8 squares.

The encoder cuts the picture into 8-pixel squares and describes each one as a mix of simple wave patterns, keeping the strong ones and rounding off the faint ones. At low quality the squares stop matching their neighbours, and sharp edges get a halo of ripples.

quality20
grid_offHide the 8 × 8 grid
original · 6× zoom
JPG · 6× zoom3.5 KB whole image
~/when-not-to-use-it

Brilliant for photos. The wrong tool for four other jobs.

JPG assumes smooth, natural pictures. Give it hard edges, flat colour or a need for see-through areas and a different format wins.

screenshot_monitorScreenshots and textSharp letters get grey smudges and ripples around them. PNG keeps text crisp and is often smaller for screenshots.Use PNGarrow_forward
layers_clearAnything see-throughJPG has no transparency; the background is always filled in, usually white.Use PNG or WebParrow_forward
tokenLogos and iconsFlat colours pick up blotches and edges blur when scaled. A vector keeps them perfect at any size.Use SVGarrow_forward
editWork in progressEvery save loses detail, as shown above. Keep the master in a lossless format and export JPG once at the end.Use PNG to editarrow_forward
~/spec-sheet

JPEG at a glance: the technical reference.

Everything a developer or archivist needs to identify, handle and validate a JPEG file, in one place.

Full nameJoint Photographic Experts Groupnamed after the committee that wrote it
Extensions.jpg .jpeg .jpe .jfif.jpg exists because early Windows allowed 3 letters
MIME typeimage/jpegimage/jpg is not registered, though often seen
Magic bytesFF D8 FFand always ends with FF D9
StandardISO/IEC 10918-1 · ITU-T T.81published 1992; file wrapper JFIF (10918-5)
Maximum size65,535 × 65,535 pxwidth and height are 16-bit fields
Bit depth8 bits per channel12-bit exists in the standard, almost never used
ColourYCbCr, greyscale, CMYKcolour is usually stored at half resolution (4:2:0)
CompressionLossy DCT + Huffmana lossless mode exists but isn’t supported by browsers
TransparencyNot supportedno alpha channel of any kind
AnimationNot supportedMotion JPEG is a video codec, not a JPG file
MetadataEXIF, XMP, IPTC, ICCeach stored in its own APP segment
~/byte-by-byte

Inside a JPG: a chain of markers, each starting with FF.

A JPEG file is a sequence of segments. Each begins with a two-byte marker, then its own length. This is the layout of a typical phone photo; click a segment to see what it holds and why it matters.

SOIFF D8APP1FF E1APP2FF E2DQTFF DBSOF0FF C0DHTFF C4SOSFF DAdata…EOIFF D9
Start of imageSOI · FF D8Two bytes that mark the very start. Every JPEG begins with FF D8, which is how software recognises one regardless of its name.lightbulbIf a “.jpg” doesn’t start with FF D8, it isn’t really a JPEG, often a renamed PNG or WebP.
FF D8
~/inspect-a-jpg

Open any JPG and read every marker, table and tag.

This page walks the file marker by marker. It works out the quality setting from the quantisation tables, reads the frame header for chroma subsampling, and decodes EXIF, XMP, IPTC and ICC data. It also pulls out the embedded thumbnail and checks it still matches the photo. Then it builds a copy with the metadata stripped, without re-encoding a single block. Everything happens on your device. Both samples are real JPGs built in your browser; the second is broken on purpose.

sample-photo.jpg · 12.5 KBas your browser shows it
Your browser could not decode this file. The marker analysis below still works.Your JPG as decoded by this browser
Embedded EXIF thumbnailEXIF thumbnail · 160 × 107 · matches the photoMean difference 4.1 of 255 levels, so the two show the same picture. Galleries, file browsers and some cloud previews show this thumbnail instead of decoding the full image.
file size12.5 KBscan data share61.9%bits / pixel0.41qualitylibjpeg q82subsampling4:2:0metadata4.2 KB
What the bytes say
Start of imageFF D8
Codingbaseline DCT
Dimensions480 × 320 px
Chroma subsampling4:2:0
Quality82, exact libjpeg tables
Huffman tablesbuilt for this image
ColourICC “Sample sRGB profile (FileFormer)”
Orientation1 · normal
CameraFileFormer Sample Camera
Taken2026:10:02 09:30:00
GPS51.50728, -0.12765
After EOInothing
Browser decodeok · 480 × 320 as shown
infoBoth JFIF (APP0) and EXIF (APP1) are present. Each standard wants its marker straight after SOI. Every common decoder reads both regardless.
warningGPS coordinates 51.50728, -0.12765: the place the photo was taken, to within metres, travels with the file.
warningEXIF contains a camera serial number, which links this photo to every other photo from the same device.
info96-byte MakerNote: manufacturer-private data, often including serial numbers and focus points. Editors that move EXIF around can break its internal offsets.
infoIPTC fields: Caption “Café on the hill at sunrise”, By-line “A. Photographer”, Keyword “café”, Keyword “sunrise”, Copyright “© 2026 FileFormer”. News agencies and stock libraries use these; anyone can read them.
infoXMP keeps an editing history: which programs saved the file and when. It can reveal earlier file names and edits.
infoThe quantisation tables are libjpeg’s reference tables scaled to quality 82 exactly, so it was saved by libjpeg, libjpeg-turbo or a tool built on them (browsers, GIMP, ImageMagick, most phones’ share sheets) at quality 82.
File map, to scaleevery byte of the file, left to right
Markers<0.1% · 4 BOther APPn0.1% · 18 BEXIF6.8% · 876 BEXIF thumbnail18.3% · 2.3 KBXMP / IPTC / comments8.0% · 1,020 BColour (ICC, Adobe)2.0% · 254 BTables & headers2.9% · 368 BScan data61.9% · 7.7 KB
OffsetMarkerLengthDecoded content
0SOIFF D8-start of image
2APP0FF E016JFIF 1.02 · density 72 × 72 dpi · no thumbnail
20APP1FF E13,211little-endian TIFF · 38 tags in IFD0, Exif, GPS, IFD1 · 2.3 KB JPEG thumbnail
3,233APP1FF E1840838 B of XMP · CreatorTool “FileFormer sample builder” · 2 editing-history events
4,075APP2FF E2252ICC profile chunk 1 of 1 · 236 B
4,329APP13FF ED134Photoshop resources 0x0404 · IPTC: Caption “Café on the hill at sunrise”, By-line “A. Photographer”, Keyword “café”, Keyword “sunrise”, Copyright “© 2026 FileFormer”
4,465COMFF FE40comment “Saved by the FileFormer sample builder”
4,507DQTFF DB67table 0, 8-bit, DC step 6, mean 20.7
4,576DQTFF DB67table 1, 8-bit, DC step 6, mean 31.3
4,645SOF0FF C017baseline DCT · 8-bit · 480 × 320 · Y 2×2 → table 0, Cb 1×1 → table 1, Cr 1×1 → table 1
4,664DHTFF C428DC 0: 9 codes up to 9 bits
4,694DHTFF C481AC 0: 62 codes up to 13 bits
4,777DHTFF C427DC 1: 8 codes up to 6 bits
4,806DHTFF C453AC 1: 34 codes up to 13 bits
4,861SOSFF DA12 + 7,928scan 1: Y + Cb + Cr · coefficients 0-63 · 7.7 KB entropy-coded · 47 stuffed FF 00
12,803EOIFF D9-end of image
Every marker is FF followed by a code byte. Lengths are big-endian and include their own 2 bytes but not the marker. After SOS comes entropy-coded data with no length: a reader finds its end by scanning for FF not followed by 00 (a stuffed literal FF) or a restart marker D0, D7.
Every EXIF tag38 tags · Intel byte order
IFDTagNameValue
IFD00x010FMake“FileFormer”
IFD00x0110Model“Sample Camera”
IFD00x0112Orientation1 · normal
IFD00x011AXResolution72
IFD00x011BYResolution72
IFD00x0128ResolutionUnit2 · inch
IFD00x0131Software“FileFormer sample builder”
IFD00x0132DateTime“2026:10:02 09:30:00”
IFD00x013BArtist“A. Photographer”
IFD00x8298Copyright“© 2026 FileFormer”
IFD00x8769Exif IFD pointeroffset 282
IFD00x8825GPS IFD pointeroffset 626
Exif0x829AExposureTime1/250 s
Exif0x829DFNumberf/2.8
Exif0x8827ISO100
Exif0x9000ExifVersion0232
Exif0x9003DateTimeOriginal“2026:10:02 09:30:00”
Exif0x9011OffsetTimeOriginal“+01:00”
Exif0x920AFocalLength26 mm
Exif0x927CMakerNote96 bytes, manufacturer-private
Exif0xA001ColorSpace1 · sRGB
Exif0xA002PixelXDimension480
Exif0xA003PixelYDimension320
Exif0xA431BodySerialNumber“FF-2026-000417”
Exif0xA434LensModel“Sample 26mm f/2.8”
GPS0x0000GPSVersionID02 03 00 00
GPS0x0001GPSLatitudeRef“N”
GPS0x0002GPSLatitude51° 30′ 26.21″
GPS0x0003GPSLongitudeRef“W”
GPS0x0004GPSLongitude0° 7′ 39.55″
GPS0x0005GPSAltitudeRef00
GPS0x0006GPSAltitude21 m
IFD10x0103Compression6
IFD10x011AXResolution72
IFD10x011BYResolution72
IFD10x0128ResolutionUnit2 · inch
IFD10x0201Thumbnail offset866
IFD10x0202Thumbnail length2337
Amber rows identify a person, a place, a moment or a specific device. IFD0 describes the main image, Exif holds camera settings, GPS the location, and IFD1 the thumbnail.
Quantisation tables: where the quality setting livesA JPG never stores its quality number. It stores 64 step sizes per table, one for each frequency in an 8 × 8 block: the top-left is the flat average, and the bottom-right the finest detail. Bigger steps throw away more. This page scales libjpeg’s reference tables to every quality from 1 to 100 and finds the closest match.
Luma (brightness)exactly q82
644691418224457921222055691421252056810183129226813202439372891320232937413318232831374443362633343540363736
Every step matches libjpeg’s reference table at this quality. Smallest step 4, largest 44.
Chroma (colour)exactly q82
669173636363668924363636369920363636363617243636363636363636363636363636363636363636363636363636363636363636363636363636
Every step matches libjpeg’s reference table at this quality. Smallest step 6, largest 36.
Quality numbers only mean something for libjpeg-style tables, used by browsers, GIMP, ImageMagick and most web tools. Cameras, Photoshop and Apple use their own tables, so “closest libjpeg quality” is only a comparison of step sizes, not the slider value used.
Lossless metadata stripCopies the quantisation tables, frame header, Huffman tables and scan data byte for byte, so no block is re-encoded. It keeps the ICC profile and Adobe marker, which change how colours display. It drops EXIF, XMP, IPTC, comments, thumbnails and anything after EOI. If the photo needs rotating, it writes a 1-tag EXIF block holding only the orientation. Then your browser decodes both files and compares every pixel.
Original file12.5 KB
DroppedAPP1 EXIF, APP1 XMP, APP13 IPTC, COM
Kepttables, frame, 1 scan, ICC
New file8.4 KB
Saving33.1% · 4.1 KB
Pixelsidentical, all 153,600 compared
downloadDownload stripped JPG
~/the-jpeg-family

Five formats carry the JPEG name. Only one is everywhere.

The committee kept designing successors. Each is technically better; none has replaced the 1992 original, because nothing beats universal support.

JPEG1992universalThe original. Every device, browser and app reads it..jpg .jpeg
Progressive JPEG1992universalSame format, stored coarse-to-fine so it appears blurry then sharpens while loading..jpg
JPEG 20002000nicheWavelet-based, better quality. Used in cinema and medical imaging; browsers dropped it..jp2 .jpx
JPEG XR2009abandonedMicrosoft’s HD Photo. Supported by old Internet Explorer only..jxr .wdp
JPEG XL2022emergingCan shrink an existing JPEG by about 20% losslessly and convert back exactly..jxl