{"id":1677,"date":"2026-10-02T09:13:00","date_gmt":"2026-10-02T13:13:00","guid":{"rendered":"https:\/\/www.xconvert.com\/blog\/?p=1677"},"modified":"2026-07-16T23:44:44","modified_gmt":"2026-07-17T03:44:44","slug":"png-lossless-vs-lossy","status":"publish","type":"post","link":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy","title":{"rendered":"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Run a PNG through TinyPNG and it can come back 70% smaller while still looking pixel-perfect \u2014 yet PNG is supposed to be a <em>lossless<\/em> format that never throws a pixel away. Both things are true, and the reason is that \u201ccompressing a PNG\u201d secretly means two completely different operations. One repacks the same image tighter and saves a little; the other quietly rebuilds the image on a smaller set of colors and saves a lot. This explainer takes apart exactly what pngquant, TinyPNG, and xconvert\u2019s color-reduction setting do under the hood \u2014 verified against the PNG specification (W3C), MDN, and pngquant\u2019s own documentation \u2014 so you know which lever you\u2019re pulling and what it costs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Quick answer:<\/strong> The PNG <em>format<\/em> is strictly <strong>lossless<\/strong> \u2014 its built-in DEFLATE compression never discards a pixel (W3C). So true \u201clossless PNG optimization\u201d (optipng, zopfli, pngcrush) can only strip metadata and find a tighter DEFLATE packing: the decoded image is <strong>bit-for-bit identical<\/strong>, and savings are usually single digits to ~20%. The dramatic \u201c70% smaller\u201d from <strong>pngquant<\/strong> and <strong>TinyPNG<\/strong> is a different trick \u2014 <strong>color quantization<\/strong>: it rebuilds the image on an optimized palette of at most 256 colors instead of 16.7 million. That\u2019s genuinely <strong>lossy<\/strong> (colors are approximated), but usually invisible on logos, icons, and flat UI. Use lossless for exact\/archival copies; use lossy color reduction for web and email weight.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jump to a section<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#is-png-lossless\">Is PNG lossy or lossless?<\/a><\/li><li><a href=\"#lossless\">Lossless optimization: the modest lever<\/a><\/li><li><a href=\"#quantization\">Lossy PNG is color quantization<\/a><\/li><li><a href=\"#which\">Which lever should you pull?<\/a><\/li><li><a href=\"#tool\">Compress a PNG on xconvert<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"is-png-lossless\">Is PNG lossy or lossless?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The format itself is unambiguous. The W3C PNG specification defines PNG as a format for the \u201clossless, portable, well-compressed storage of static and animated raster images.\u201d Decode any PNG and you get back exactly the pixels that were encoded \u2014 there is no quality slider that trades away detail for size the way JPEG\u2019s does.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s because a PNG is <em>already<\/em> compressed, losslessly, by design. The spec states plainly that \u201cPNG compression method 0 is deflate compression\u201d \u2014 the same DEFLATE algorithm used in ZIP and gzip. Before that step, \u201cPNG allows image data to be filtered before it is compressed,\u201d because \u201cfiltering can improve the compressibility of the data.\u201d Filtering followed by DEFLATE is a fully reversible pipeline: nothing is thrown away, and decoding reconstructs the original pixels exactly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So where does \u201clossy PNG\u201d come from? Here is the key insight the rest of this article hangs on: <strong>any loss happens <em>before<\/em> the pixels are handed to PNG\u2019s lossless encoder.<\/strong> A tool that advertises a \u201clossy PNG\u201d first alters the image \u2014 specifically, it reduces how many distinct colors the image contains \u2014 and <em>then<\/em> saves that already-simplified picture as a perfectly ordinary, still-lossless PNG. The PNG format never became lossy; the image was changed on the way in.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"lossless\">Lossless optimization: the modest lever<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cLossless PNG optimization\u201d keeps every pixel and simply repacks the file more efficiently. There are three honest, fully reversible levers:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>A tighter DEFLATE pass.<\/strong> The same pixels can be encoded into a smaller DEFLATE stream if the encoder works harder at it. Google\u2019s <strong>Zopfli<\/strong> is built for exactly this \u2014 it describes itself as a library to \u201cperform very good, but slow, deflate or zlib compression,\u201d emitting a valid, standard deflate stream (RFC 1951) that any PNG decoder reads back normally. Fewer bytes, identical image.<\/li><li><strong>Smarter row filtering.<\/strong> Because PNG filters each row before compression, choosing better per-row filters makes the data compress tighter. Optimizers like OptiPNG and pngcrush try multiple filter strategies and keep whichever produces the smallest result.<\/li><li><strong>Stripping metadata.<\/strong> PNGs carry optional <strong>ancillary chunks<\/strong> \u2014 text comments, timestamps, editor tags, embedded color profiles. The spec notes a decoder \u201ccan safely ignore\u201d unknown ancillary chunks, so removing the ones you don\u2019t need (while keeping a color profile you do) is free size with zero visual change.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The honest catch: a PNG exported by a modern editor is often <em>already<\/em> near-optimally packed, so this whole category typically buys <strong>single digits up to ~20%<\/strong>. Real and reversible, but rarely dramatic. On xconvert, this is what the <strong>Compression level<\/strong> slider governs \u2014 how hard the lossless DEFLATE pass works. Turn it up and the file gets smaller and the encode slower, while the decoded pixels stay bit-for-bit identical.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quantization\">Lossy PNG is color quantization<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the mechanism behind every \u201c70% smaller\u201d headline, and it has a precise name: <strong>color quantization<\/strong> (also called palette reduction). Here is what pngquant and TinyPNG actually do.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A full-color PNG is <strong>24-bit truecolor<\/strong> \u2014 three 8-bit channels, up to <strong>16.7 million<\/strong> possible colors per pixel. Quantization converts that into an <strong>indexed-color<\/strong> PNG. MDN describes this mode as one where \u201ceach pixel is a <em>D<\/em>-bit value indicating an index into a color palette,\u201d and \u201cthe colors in the palette all use an 8-bit depth.\u201d Instead of storing a full 24-bit color at every pixel, the file stores one small palette (up to 256 entries) plus a compact index per pixel. TinyPNG sums it up in a sentence: it uses \u201csmart lossy compression techniques\u2026 by selectively decreasing the number of colors in the image, fewer bytes are required to store the data.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The hard part \u2014 and where quality is won or lost \u2014 is <strong>choosing which colors survive<\/strong>. The palette isn\u2019t fixed; it\u2019s computed from your specific image:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Build an optimal palette.<\/strong> pngquant uses a \u201cmodified version of the Median Cut quantization algorithm,\u201d refined with Voronoi iteration (K-means) to pick the set of colors that best represents the original. Median cut repeatedly splits the color space; pngquant\u2019s variant splits so that colors sit as close as possible to their chosen palette entry.<\/li><li><strong>Map every pixel to its nearest palette color.<\/strong> Each original pixel is replaced by the closest surviving color. This is the lossy step \u2014 the approximation is permanent.<\/li><li><strong>Dither to hide the seams.<\/strong> Snapping a smooth region onto a handful of colors can leave visible steps. <strong>Dithering<\/strong> scatters pixels between palette colors so the eye blends them. pngquant uses \u201ca unique adaptive dithering algorithm that adds less noise\u2026 than the standard Floyd\u2013Steinberg.\u201d<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Crucially, the output is still a real PNG and it <strong>preserves full alpha transparency<\/strong> (pngquant states exactly that) \u2014 so a transparent logo comes out transparent. And it works: pngquant reports reductions \u201coften as much as 70%,\u201d with a worked example taking a 75,628-byte PNG down to 19,996 bytes \u2014 73% smaller \u2014 almost all of it from quantization, not the lossless tricks above. On xconvert, this lever is the <strong>Colors<\/strong> setting: leave it <strong>ORIGINAL<\/strong> for a purely lossless pass, or pick <strong>By Color Reduction + Dither<\/strong> to run exactly this quantize-and-dither pipeline.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which\">Which lever should you pull?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Match the lever to the image and the goal:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>You have\u2026<\/th><th>Pull this lever<\/th><th>Why<\/th><\/tr><\/thead><tbody><tr><td>An archival master, or a PNG you\u2019ll re-edit later<\/td><td><strong>Lossless only<\/strong> (Compression level; Colors = ORIGINAL)<\/td><td>Bit-for-bit identical; no color decisions baked in<\/td><\/tr><tr><td>A logo, icon, screenshot, or flat illustration for web\/email<\/td><td><strong>Lossy<\/strong> (Colors = By Color Reduction + Dither)<\/td><td>Few distinct colors \u2192 quantizes ~60\u201370% smaller with no visible change<\/td><\/tr><tr><td>A <strong>photograph<\/strong> that happens to be a PNG<\/td><td><strong>Change the format entirely<\/strong><\/td><td>PNG is the wrong container for photographic content<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The one image type to watch is <strong>smooth gradients<\/strong> \u2014 sunsets, soft shadows, glows. They contain thousands of subtly different colors, so squeezing them onto a 256-color palette can produce visible <strong>banding<\/strong> (stepped contours). Dithering softens it at a small size cost; preview gradient-heavy images before you commit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And the honest edge case: <strong>if it\u2019s a photograph, no PNG compression is the right answer.<\/strong> MDN is direct that for such content \u201cWebP\/AVIF provide even better compression and reproduction\u201d than PNG. A photo saved as PNG will almost always be dramatically smaller as WebP or JPG than as any optimized PNG \u2014 see <a href=\"https:\/\/www.xconvert.com\/blog\/png-vs-webp-vs-jpg\/\">PNG vs WebP vs JPG<\/a> for which to pick. Quantization is for graphics, not photos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tool\">Compress a PNG on xconvert<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/www.xconvert.com\/compress-png\">xconvert PNG Compressor<\/a> exposes both levers on one page, and the output stays a PNG:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Open <a href=\"https:\/\/www.xconvert.com\/compress-png\">xconvert.com\/compress-png<\/a> and click <strong>Upload<\/strong> (from your Computer, Google Drive, or Dropbox).<\/li><li>Open <strong>Advanced Options<\/strong> (the gear) to reveal the controls.<\/li><li>Pick how to steer size: <strong>Target file size (%)<\/strong> (marked <strong>Best<\/strong>), an exact <strong>Specific file size<\/strong>, or <strong>Image Quality (%)<\/strong>.<\/li><li>Set <strong>Colors<\/strong> \u2014 the lossy lever. Leave it <strong>ORIGINAL<\/strong> for a pixel-identical lossless pass, or choose <strong>By Color Reduction + Dither<\/strong> to run the palette quantization that delivers the big cut (the dither smooths gradients).<\/li><li>Adjust <strong>Compression level<\/strong> and <strong>Compression speed<\/strong> \u2014 the lossless DEFLATE effort (higher = smaller and slower, still bit-for-bit identical). Optionally let <strong>Auto Scale<\/strong> downsize oversized dimensions.<\/li><li>Click <strong>Compress PNGs<\/strong> and download.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Your file is uploaded over an encrypted connection, is processed on our servers and deleted automatically a few hours later. If you just want a plain step-by-step walkthrough rather than the mechanism, our <a href=\"https:\/\/www.xconvert.com\/blog\/compress-a-png-image\/\">compress a PNG image<\/a> guide covers it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h5 class=\"wp-block-heading\">Is PNG a lossy or lossless format?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PNG is strictly lossless.<\/strong> The W3C specification defines it as a format for \u201clossless\u2026 storage,\u201d and decoding a PNG always returns the exact pixels that were encoded. When a tool offers \u201clossy PNG,\u201d it isn\u2019t making the format lossy \u2014 it reduces the image\u2019s colors <em>before<\/em> saving, then writes an ordinary lossless PNG of that simplified picture.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">How does TinyPNG (or pngquant) actually work?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>By color quantization.<\/strong> TinyPNG says it works \u201cby selectively decreasing the number of colors in the image, [so] fewer bytes are required to store the data,\u201d converting 24-bit color into a small indexed palette. pngquant does the same with a modified Median Cut algorithm plus adaptive dithering. The result is a normal PNG built on at most 256 well-chosen colors instead of 16.7 million.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">What is color quantization?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Reducing an image to a smaller, optimized color palette.<\/strong> The tool analyzes your specific image, computes the set of (up to 256) colors that best represents it, then remaps every pixel to its nearest palette color. Optional dithering scatters pixels between palette colors so gradients still look smooth. Fewer colors means far fewer bytes.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">What\u2019s the difference between \u201cCompression level\u201d and \u201cColors\u201d on the tool?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Compression level is lossless; Colors is where \u201clossy\u201d lives.<\/strong> Compression level controls how hard the reversible DEFLATE pass works \u2014 a smaller file with identical pixels. Setting <strong>Colors \u2192 By Color Reduction + Dither<\/strong> turns on lossy quantization, which permanently reduces colors for a much bigger cut. Leaving <strong>Colors<\/strong> on <strong>ORIGINAL<\/strong> keeps the whole operation lossless.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Is \u201clossy PNG\u201d the same as saving a JPEG?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>No.<\/strong> JPEG uses block-based frequency (DCT) compression that blurs sharp edges and can\u2019t store transparency at all. Lossy PNG uses palette quantization, which keeps <strong>crisp edges and full alpha transparency<\/strong> intact (pngquant \u201cpreserves full alpha transparency\u201d). That\u2019s why quantization \u2014 not JPEG \u2014 is the right lossy method for logos, icons, and UI, where JPEG would smear the edges.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Can I compress a PNG with zero quality loss?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Yes, but expect modest savings.<\/strong> A purely lossless pass \u2014 a tighter DEFLATE packing (e.g. Zopfli), better row filtering, and stripping unneeded metadata \u2014 leaves the image bit-for-bit identical and usually saves single digits up to ~20%. The headline 60\u201370% reductions require lossy color quantization, which is visually identical on flat graphics but not literally lossless.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sources<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Last verified 2026-07-16.<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.w3.org\/TR\/png\/\">W3C \u2014 Portable Network Graphics (PNG) Specification<\/a> \u2014 defines PNG as \u201clossless\u201d; \u201cPNG compression method 0 is deflate compression\u201d; row filtering \u201ccan improve the compressibility of the data\u201d; unknown ancillary chunks \u201ccan safely ignore\u201d; indexed-color palette.<\/li><li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Media\/Formats\/Image_types\">MDN \u2014 Image file type and format guide<\/a> \u2014 PNG \u201cuses lossless compression\u201d with \u201cfull alpha transparency support\u201d; indexed color as a <em>D<\/em>-bit index into a palette; WebP\/AVIF beat PNG for photographs.<\/li><li><a href=\"https:\/\/pngquant.org\/\">pngquant \u2014 lossy PNG compressor<\/a> \u2014 \u201clossy compression of PNG images\u201d; reductions \u201coften as much as 70%\u201d; 75,628 \u2192 19,996-byte example; modified Median Cut plus adaptive dithering; \u201cpreserves full alpha transparency.\u201d<\/li><li><a href=\"https:\/\/tinypng.com\/\">TinyPNG<\/a> \u2014 \u201csmart lossy compression techniques\u2026 by selectively decreasing the number of colors in the image, fewer bytes are required to store the data.\u201d<\/li><li><a href=\"https:\/\/github.com\/google\/zopfli\">Google Zopfli<\/a> \u2014 \u201cvery good, but slow, deflate or zlib compression\u201d producing standard, valid deflate streams \u2014 the lossless \u201cbetter DEFLATE\u201d lever.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>PNG is a lossless format, so how do TinyPNG and pngquant make it 70% smaller? An explainer of lossless optimization vs lossy color quantization.<\/p>\n","protected":false},"author":3,"featured_media":1676,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,14],"tags":[],"class_list":["post-1677","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-guides","category-tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PNG Compression: Lossless vs Lossy (pngquant-Style Tools)<\/title>\n<meta name=\"description\" content=\"PNG is a lossless format, so how do TinyPNG and pngquant make it 70% smaller? An explainer of lossless optimization vs lossy color quantization.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)\" \/>\n<meta property=\"og:description\" content=\"PNG is a lossless format, so how do TinyPNG and pngquant make it 70% smaller? An explainer of lossless optimization vs lossy color quantization.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy\" \/>\n<meta property=\"og:site_name\" content=\"XConvert Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/xconvertcom\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-02T13:13:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-90.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"James\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@xconvert_com\" \/>\n<meta name=\"twitter:site\" content=\"@xconvert_com\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy\"},\"author\":{\"name\":\"James\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\"},\"headline\":\"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)\",\"datePublished\":\"2026-10-02T13:13:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy\"},\"wordCount\":1993,\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/featured-90.png\",\"articleSection\":[\"How To Guides\",\"Tools\"],\"inLanguage\":\"en-CA\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy\",\"name\":\"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/featured-90.png\",\"datePublished\":\"2026-10-02T13:13:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\"},\"description\":\"PNG is a lossless format, so how do TinyPNG and pngquant make it 70% smaller? An explainer of lossless optimization vs lossy color quantization.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy#primaryimage\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/featured-90.png\",\"contentUrl\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/featured-90.png\",\"width\":2400,\"height\":1260,\"caption\":\"The xconvert PNG Compressor at \\\/compress-png with the Upload button highlighted \u2014 set Colors to By Color Reduction + Dither for the lossy palette savings.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/png-lossless-vs-lossy#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.xconvert.com\\\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/\",\"name\":\"XConvert Blog\",\"description\":\"Blog for XConvert file converter\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-CA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/#\\\/schema\\\/person\\\/3434db135e6a7f239ba8414244df9845\",\"name\":\"James\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-CA\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g\",\"caption\":\"James\"},\"url\":\"https:\\\/\\\/www.xconvert.com\\\/blog\\\/author\\\/james\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)","description":"PNG is a lossless format, so how do TinyPNG and pngquant make it 70% smaller? An explainer of lossless optimization vs lossy color quantization.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy","og_locale":"en_US","og_type":"article","og_title":"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)","og_description":"PNG is a lossless format, so how do TinyPNG and pngquant make it 70% smaller? An explainer of lossless optimization vs lossy color quantization.","og_url":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy","og_site_name":"XConvert Blog","article_publisher":"https:\/\/www.facebook.com\/xconvertcom","article_published_time":"2026-10-02T13:13:00+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-90.png","type":"image\/png"}],"author":"James","twitter_card":"summary_large_image","twitter_creator":"@xconvert_com","twitter_site":"@xconvert_com","twitter_misc":{"Written by":"James","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy#article","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy"},"author":{"name":"James","@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845"},"headline":"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)","datePublished":"2026-10-02T13:13:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy"},"wordCount":1993,"image":{"@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-90.png","articleSection":["How To Guides","Tools"],"inLanguage":"en-CA"},{"@type":"WebPage","@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy","url":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy","name":"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)","isPartOf":{"@id":"https:\/\/www.xconvert.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy#primaryimage"},"image":{"@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy#primaryimage"},"thumbnailUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-90.png","datePublished":"2026-10-02T13:13:00+00:00","author":{"@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845"},"description":"PNG is a lossless format, so how do TinyPNG and pngquant make it 70% smaller? An explainer of lossless optimization vs lossy color quantization.","breadcrumb":{"@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy"]}]},{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy#primaryimage","url":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-90.png","contentUrl":"https:\/\/www.xconvert.com\/blog\/wp-content\/uploads\/2026\/07\/featured-90.png","width":2400,"height":1260,"caption":"The xconvert PNG Compressor at \/compress-png with the Upload button highlighted \u2014 set Colors to By Color Reduction + Dither for the lossy palette savings."},{"@type":"BreadcrumbList","@id":"https:\/\/www.xconvert.com\/blog\/png-lossless-vs-lossy#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.xconvert.com\/blog"},{"@type":"ListItem","position":2,"name":"PNG Compression: Lossless vs Lossy (pngquant-Style Tools)"}]},{"@type":"WebSite","@id":"https:\/\/www.xconvert.com\/blog\/#website","url":"https:\/\/www.xconvert.com\/blog\/","name":"XConvert Blog","description":"Blog for XConvert file converter","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.xconvert.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-CA"},{"@type":"Person","@id":"https:\/\/www.xconvert.com\/blog\/#\/schema\/person\/3434db135e6a7f239ba8414244df9845","name":"James","image":{"@type":"ImageObject","inLanguage":"en-CA","@id":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/46be416a360dc6b95bffc4b116d86872c03f8d8e4c1047a3a08033742f03d04d?s=96&d=mm&r=g","caption":"James"},"url":"https:\/\/www.xconvert.com\/blog\/author\/james"}]}},"_links":{"self":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/comments?post=1677"}],"version-history":[{"count":1,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1677\/revisions"}],"predecessor-version":[{"id":1678,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/posts\/1677\/revisions\/1678"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media\/1676"}],"wp:attachment":[{"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/media?parent=1677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/categories?post=1677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xconvert.com\/blog\/wp-json\/wp\/v2\/tags?post=1677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}