Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Lossy PNG for true-color images (Velocity Conf ...
Search
Kornel Lesiński
November 18, 2014
Design
930
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Lossy PNG for true-color images (Velocity Conf EU 2014)
Kornel Lesiński
November 18, 2014
More Decks by Kornel Lesiński
See All by Kornel Lesiński
SudWeb
kornel
0
280
Modern PNG compressors
kornel
13
1.2k
Handling binary data in JS
kornel
1
440
Mobblestouch — W3C Touch Events and gestures
kornel
2
770
Server-Sent Events
kornel
5
1k
"HTML5" Transport Protocol
kornel
3
440
Front-end Performance
kornel
5
550
Other Decks in Design
See All in Design
【CEDEC2026】派手さと見やすさは両立できる!『Shadowverse: Worlds Beyond』エフェクト・3D背景の超進化したビジュアル設計
cygames
PRO
2
2.4k
コールセンターのオペレーターに6時間だけなってみた
h0sa
0
430
組織で働く大人が「知らないままにやってみる」を取り戻す方法とその意味〜企業で働く実務家による実践知の言語化を事例とした考察〜
chiemitaki
1
510
“なんとなくFigma”から一歩先へ。AI時代も活きるWeb制作フロー
ayumidesign
0
280
信頼をデザインし、ブランドで市場を拓く。/ Designship2026
assuredjp
PRO
0
280
広い関与の可能性に どう向き合うのか? 私たちは。|Timee MarketingDesign 2026-06-18
bebe
0
1.2k
デザインハーネスはじめの一歩
satty9556
0
890
LP制作のための熱量ハーネス -人の熱量を、AIとの制作につなぐ-
niccy
0
2.2k
UNION TEC GROUP | 2026' Project Portfolio
uniontec2000
0
120
エンジニアでも捗る デザイナー的思考入門(bitA Edit 新ver)
tinykitten
1
660
AI-Slopなデザインを生まないためのデザインプロセス戦略
takanorip
10
6.5k
Spectrum Tokyo Meetup #26「できることが増えた時、デザイナーは何に時間を使うべきか」
muture
PRO
1
380
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
360
Testing 201, or: Great Expectations
jmmastey
46
8.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Designing Powerful Visuals for Engaging Learning
tmiket
1
630
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
580
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
340
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Deep Space Network (abreviated)
tonyrice
0
400
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
620
Transcript
Lossy PNG Kornel Lesiński 2014
PNG Lossless JPEG Lossy
PNG PNG JPEG Lossless Lossy PNG Opaque Alpha Channel WebP
JPEG 2000 JPEG XR JPEG XT if you need lossy and alpha, it becomes complicated. You may need to serve 4 different files for every image!
flickr.com/photos/ama711/8760361969 0% 100% Lossy PNG is a hack, but it
works like a truly lossy format
Pixels Math gzip Standard PNG
None
gzip finds and removes repeated sequences of identical pixels
00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001
00001010 0 10 110 1110 11110 111110 1111110 11111110 111111110 1111111110 11111111110 → → → → → → → → → → → Instead of storing 8 bits per byte, gzip uses variable-length sequences. Most popular bytes are given shortest sequences.
Some images don’t have repeated pixels and few very popular
colors
0 1 2 3 4 5 6 7 8 9
0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = = Instead of storing uncompressible absolute values PNG can store difference between neighboring pixels
5 6 4 6 5 5 6 4 5 4
5 + 1 -2 +2 - 1 0 + 1 -2 + 1 - 1 = = 5 0 0 0 0 0 0 0 0 0 0 Noisy images won’t compress well… unless you fake the data and remove the noise
Pixels Math gzip Lies Lossy PNG trick is about replacing
math with lies. Only the encoder changes, so it’s 100% compatible.
? When PNG “guesses” what the next pixel will be,
it can make the guess based on average of 2 neighbors, which in lossy PNG causes blur
flickr.com/photos/tundra-ice/5124841152 Original: 2MB 0.6MB 0.3MB
Original: 2MB 0.6MB 0.3MB
Original: 221KB Lossy: 67KB ed_g2s
182KB flickr.com/photos/_tar0_/6223343149
27KB flickr.com/photos/_tar0_/6223343149 The algorithm can decide quality of every pixel,
so it tends to preserve sharp edges, especially text
28KB flickr.com/photos/_tar0_/6223343149 Top of the file has 0% quality, bottom
80% quality
• Works everywhere—fully backwards-compatible • No color limit—supports 24 and
32-bit PNG • Preserves edges—per-pixel quality control • Very fast—small tweak in the encoder • Streamable—only needs 2 lines of the image
pngquant -Q 75-100 --skip-if-larger \ -o out.png in.png || posterize
-b -Q 75 in.jpg out.jpg pngquant is often more efficient, but can’t guarantee quality. You can combine the two for best results.
pngmini.com — ImageAlpha GUI github.com/pornel/mediancut-posterizer CLI logicnet.dk/Analyzer — Image Analyzer
GUI @pornelski pngmini.com/lossypng.html