You export a photo at what feels like a reasonable quality setting, upload it, and the result looks softer than expected — flatter, slightly muddy in the shadows, with halos forming around high-contrast edges. The platform didn’t just post your file. It ran its own compression pass over it, and the tradeoffs it made were not the ones you made in Lightroom or Photoshop.
Understanding what happens during that second compression pass — and why it’s different from the first — is what separates an export workflow that holds up from one that quietly throws away the detail you spent time capturing.
Why Platforms Recompress at All
The short answer is bandwidth and storage at scale. A platform serving hundreds of millions of images daily has strong financial incentive to keep file sizes small, and the most practical way to do that consistently is to run every incoming file through its own encoder on ingest. Your carefully tuned export is an input to their pipeline, not the final product.
The practical consequence is that your image goes through at least two lossy compression stages if you’re uploading a JPEG: yours and theirs. This matters because JPEG compression is not cumulative in the way people sometimes assume — it isn’t simply “a little more loss each time” applied uniformly. What actually happens is that the DCT (Discrete Cosine Transform) quantization step discards frequency information each time it runs, and the quantization tables the platform uses are almost certainly different from the ones your export applied. Mismatched quantization tables on successive encodes produce blocking artifacts and ringing that wouldn’t appear if the same table had been applied twice.
The implication is counterintuitive: uploading a high-quality JPEG doesn’t protect you from platform recompression — it just means the platform has more detail to work with before it applies its own quantization. Uploading a heavily pre-compressed JPEG compounds the damage.
What Chroma Subsampling Does to Your Colors
One of the least-discussed but most visible changes in social media exports is chroma subsampling — specifically the difference between 4:4:4 and 4:2:0. In a 4:4:4 image, every pixel carries its own full color information. In 4:2:0, color is sampled at one quarter the resolution of luminance. Human vision is more sensitive to brightness differences than to color differences, so this is mathematically defensible and often invisible in smooth gradients. It becomes visible in two scenarios.
The first is text or fine graphic elements on a colored background — chroma subsampling blurs the color boundary, softening edges that should be sharp. The second is saturated, highly detailed color transitions, the kind that appear in bold fashion photography or heavily graded sunset shots. Most major platforms apply 4:2:0 subsampling on output even if your uploaded file was 4:4:4. If color accuracy in fine detail matters to your image, upload in sRGB with fully saturated colors that compress predictably, and if possible check your finished result on a calibrated screen rather than the screen you edited on.
Pixel Dimensions and the Resampling Problem
Platforms enforce maximum display dimensions, and if your uploaded image exceeds them, it gets scaled down. Scaling down is not free — it requires a resampling algorithm to map pixel values from a larger grid to a smaller one, and different algorithms produce meaningfully different results.
A bicubic downsample (common in most professional export pipelines) tends to preserve edge sharpness reasonably well. Lanczos resampling does slightly better with aliasing control. But platform-side resampling varies, changes without announcement, and applies after their compression pass — meaning any sharpening you baked into your export may interact poorly with their downsample, producing oversharpening artifacts or uneven acuity across the frame.
The practical approach is to export at or slightly below the platform’s documented display dimensions rather than relying on the platform to downsample correctly. This gives you control over which resampling algorithm runs first. For Instagram specifically, our article on what happens to image quality when you export for Instagram goes into the recommended pixel dimensions and format behavior in detail.
Format Choice Before Upload
Most platforms accept JPEG, PNG, and increasingly HEIC or HEIF, but acceptance and handling are different things.
PNG is lossless, so there’s no quality loss in your export — but the platform will compress it on ingest, usually to JPEG or WebP for display, at which point you’ve gained nothing over uploading a high-quality JPEG in the first place. The one real use case for PNG uploads is images with transparency or images that are entirely flat graphics with hard edges, where PNG’s lossless compression produces a smaller file than JPEG could at comparable quality.
WebP offers meaningfully better compression efficiency than JPEG at equivalent perceptual quality, and browser support has been broad for several years now (check current platform documentation before relying on it, since acceptance policies vary and change). The tradeoff is that WebP encoded with aggressive settings will still be recompressed by platforms that normalize to their own format.
The codec matters less than the principle: you are not controlling the final file the viewer sees, only the input to the platform’s pipeline. Your goal is to give that pipeline as clean an input as possible — not over-compressed, sized at the platform’s native display dimensions, in sRGB, and without embedded profiles that could trigger unexpected color conversion.
What You Can Actually Control
Given that you can’t opt out of platform recompression, the decisions that affect the visible result are:
- Export color space: sRGB is the safe choice. Wide-gamut profiles like Display P3 are clipped or converted unpredictably depending on the platform and the viewer’s display.
- Starting quality: Export JPEG at a quality setting high enough that the platform has clean data to work with, but recognize that very high settings do not prevent platform quantization — they just delay it.
- Pre-upload sharpening: Moderate sharpening applied before upload tends to survive better than heavy sharpening, which can interact badly with the platform’s own processing.
- Pixel dimensions: Match the platform’s documented maximum display dimensions. Letting the platform scale down is ceding one more step to an algorithm you don’t control.
- Metadata stripping: Many platforms strip EXIF and IPTC on ingest. If location data, copyright, or caption information matters, keep a copy locally and don’t rely on the platform to preserve it.
The underlying mechanism here is the same one that governs any multi-generation lossy encode: each pass discards information, and information discarded cannot be recovered. The best available strategy is to minimize what you lose in your own export, understand what the platform will do regardless, and treat the two compression passes as a sequence you’re designing for — not a process you’re handing off.
For a broader look at what format decisions look like earlier in the capture-to-export chain, our Image Quality coverage covers compression behavior across formats and workflows in more depth.