Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Lossy PNG for true-color images (Velocity Conf ...
Search
Kornel Lesiński
November 18, 2014
Design
2
870
Lossy PNG for true-color images (Velocity Conf EU 2014)
Kornel Lesiński
November 18, 2014
Tweet
Share
More Decks by Kornel Lesiński
See All by Kornel Lesiński
SudWeb
kornel
0
180
Modern PNG compressors
kornel
13
1.2k
Handling binary data in JS
kornel
1
380
Mobblestouch — W3C Touch Events and gestures
kornel
2
720
Server-Sent Events
kornel
5
950
"HTML5" Transport Protocol
kornel
3
370
Front-end Performance
kornel
5
460
Other Decks in Design
See All in Design
SaaSのマーケティングを進めるサービスサイトを育てる取り組み / Designship 2024 Main Stage
sms_tech
1
1.4k
ユーザーに向き合うデザインが介護・福祉の現場を変える / User-facing design changes the field of care and welfare
sms_tech
0
200
東急URBAN HACKSのデザイナーって何やってるの? 〜Designer Night #1〜 移動・不動産領域の取り組み
tmtgtkhs
0
190
Where to Start with a Design System Across Different Frontend Frameworks | SpectrumTokyoMeetup#15
tararira
0
110
Dive Deep into Communication
yomtsu
0
180
東急URBAN HACKSのデザイナーって何やってるの? 〜Designer Night #1〜 組織横断のデザインの 取り組みについて
sig
1
250
HCDフォーラム2024 「HCDとHAI ~人間とAIが共存する世界の実現~」
kamechi7222222
0
250
PMとデザイナーはニコイチ! メリットと具体的なアクション10選
mosmos_noki
2
1.3k
「ちょっといいUI」を目指す努力 / Striving for Little Big Details
usagimaru
6
4k
みんなに知って欲しい 視覚過敏のアクセシビリティ
0opacity_
5
1.7k
ENEOS社事例|アプリ事業を加速させるデザイナーの取り組み / dx-eneos-design
cyberagentdevelopers
PRO
1
660
2024/11/25 ReDesigner Online Meetup 会社紹介
cybozuinsideout
PRO
0
330
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1366
200k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7.1k
YesSQL, Process and Tooling at Scale
rocio
170
14k
Unsuck your backbone
ammeep
669
57k
Six Lessons from altMBA
skipperchong
27
3.6k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Typedesign – Prime Four
hannesfritz
40
2.5k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
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