惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
T
Threatpost
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
Recorded Future
Recorded Future
小众软件
小众软件
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
博客园 - 聂微东
美团技术团队
F
Fortinet All Blogs
I
InfoQ
U
Unit 42
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
GbyAI
GbyAI
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
H
Help Net Security
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
Jina AI
Jina AI
The Register - Security
The Register - Security
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 叶小钗
Recent Announcements
Recent Announcements
D
DataBreaches.Net
IT之家
IT之家
雷峰网
雷峰网
Y
Y Combinator Blog
W
WeLiveSecurity
P
Proofpoint News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
月光博客
月光博客
The Hacker News
The Hacker News

endtimes.dev

Happy new year | endtimes.dev why lowercase letters save data Practical betterments | endtimes.dev Short posts and some site updates Input Output | endtimes.dev Actually, dark mode can save the planet Why your website should be under 14kB in size HTML and CSS only multiple color scheme picker Why your website should work without Javascript. An HTML and CSS only dark-mode toggle button. you can use css to remove the double-tap zoom feature on iOs Missing Dice | endtimes.dev Can Dark Mode Save Battery Life and Human Civilzation? Your DNS has a significant impact on site speed. Add spaces to the dock on MacOS You can leave out <html>, <head>, and <body> tags. Listen for changes between dark and light mode with javascript Use a keyboard shortcut to quickly toggle light and dark mode on MacOs. You can restore the startup chimes on MacOS Emoji Clipboard | endtimes.dev You can use Emojis as Favicons .dev and HSTS preload | endtimes.dev Prod — Block Distractions. Achieve your goals. Pattern generator | endtimes.dev Green Quarantine | endtimes.dev Qwitter Bot | endtimes.dev
Why Your Website Should Use Dithered Images
2020-12-19 · via endtimes.dev

The average web page has nearly 1MB of images.1

That's a lot of data. More bytes on average than html, css, fonts, and javascript combined.

Worse still, most of these are stock images of people in suits doing business.

Oversized images have a negative impact on your site's speed, accessibility, seo, and on the climate.

Sending unnecessary data down internet tubes is considered bad practice. So, we optimize images with the correct compression, format, encoding, and dimensions.

These methods reduce file sizes without altering the content of the image. The image will look pretty much the same as when you first snapped it. (or downloaded it from unsplash).

But is all that content necessary?

Sometimes, like in the case of a clothing store, or a guide to foraging mushrooms.

But definitely not all the time.

In blogs, and magazines especially, images often serve an illustrative purpose — they reinforce a point in the text.

It's for those instances that I'd like to introduce you to dithering: a method of reducing file sizes in a stylized way.

What is Dithering? #

Dithering is a retro way of reducing the colors in an image for use on old hardware or in print. It removes colors, and strategically place dots to emulate the missing shades.

It's easier to explain with an example…

Here's a picture of my dog taken on a modern smart phone:

undithered picture of my dog
Original (undithered) picture of my dog 123kB

She looks great on our modern devices in full color.

But what if we had to display the same picture on an old black and white computer screen? A screen where each pixel is either off or on. (black or white).

How would we do this? How do we make every pixel in our image either black or white?

The simplest way is to go through each pixel and if it's a light‑ish pixel turn it on, if it's a dark‑ish pixel turn it off.

So, we pick a threshold, some shade between black and white, and if a pixel is lighter than the threshold we turn it on. If it's darker we turn it off.

Easy, but, here's the result:

undithered black and white picture of my dog
Reduced to black and white with no dithering 15kB

That looks terrible.

You can still tell it's a dog, but you can't be certain it's my dog.

With just two shades we've lost too much of what makes her recognizable e.g. the contours of her face, her nostrils.

This is where dithering comes in. Dithering simulates all the missing shades with a diffusion of dots.

It swaps pixel brightness with dot density. The denser the dots, the darker the shade.

The next image uses only on and off pixels like the one above, but this time we've dithered it:

a dithered picture of my dog
Reduced to black and white with dithering 48kB

Examples of dithering and the final image file sizes

original dog image but 200px wide
Our original image resized to 200 by 200 pixels 30kB
dog image reduced to 12 colors and dithered
Reduced to 12 colors using 4x1 ordered dithering 12kB
dog image reduced to 64 colors and dithered
Reduced to 64 colors using 4x4 ordered dithering 14kB
dog image dithered to look like an original gameboy game
Dithered to look like the original GameBoy™ 8kB
dog image dithered to just 5 colors
error diffusion dithering in red, green, blue, black, and white 17kB
dog image dithered to match the colors of this website
2x2 ordered dithering using the color palette of this website 9kB

That's definitely my dog.

There are many methods of dithering but they all use the same basic principal.

Dithering works with any color palette too. You can apply the same idea above, but for each color in a pixel: red, green, blue.

You don't need to know the specifics of how dithering works to apply it to your website. But if you want to learn more, wikipedia has a good article that covers the different methods.

How does dithering reduce file sizes? #

Dithering turns images that would normally need to be compressed with lossy compression, into images that compress very well with lossless compression.

Lossless Compression #

lossless compression, the type used by png files, works by finding repeated sequences of pixels — then encoding a shortcut for that sequence.

Like if I replaced the word "dithering" in this post, with the letter "d". Then at the top of the post wrote the instruction "dithering=d". That would be a form of lossless compression. None of the information from the original post would be lost.

lossless compression is great when your image has lots of repeating sequences of pixels. But photos with a full range of color have very few (if any) repeating sequences — each pixel is slighly different to its neighbours. So, lossy compression techniques are used instead.

Lossy Compression #

Lossy compression, the type used in jpeg files, is way more complicated. It doesn't work at all like lossless compression. It removes information specifically in ways that are hard for humans to perceive.

jpeg does a really good job compressing photos. It's great if the image contains fluffy real life things like rabbits and clouds.

However, if a jpeg contains stark contrasts and sharp lines, like text, graphics, or dithered images. It fails.

The same lossy compression technique that works on rabbits and clouds, results in weird artifacts in our image and much larger file sizes.

If you'd like to learn more about how jpeg compresses images computerphile have a good video series on it.

A note on file formats #

The original picture of my dog is a jpeg, and the dithered images are png or webp. The file sizes are the result of converting the jpeg to png after dithering.

If the original image was a png it would have a much larger file size. The reduction in size after dithering it would have seemed much more impressive. But the comparison wouldn't have been very useful.

The new-ish image format webp has both lossy and lossless modes, and results in even smaller dithered images.

Why Dither in 2020? #

It's 2020, we've got a lot of problems, but limited colors on computer screens isn't one of them. So, why should you dither images?

  • Speed. Large images make your website slow and inaccessible to visitors with slow connections.
  • Cost to visitors. Large images cost visitors money, sometimes a lot of money. To put it in perspective, a mobile user in Malawi pays $27.41 per gigabyte in Canada its $12.553.
  • Costs for you. Serving large images costs you money too.
  • Climate Change. Big images waste electricity and emit carbon. The internet is responsible for 3.7% of global carbon emissions4. A number that keeps growing as we send more and more data.
  • SEO. Faster loading times and a good user experience will rank your site higher in search results.

When to dither? #

Not every image on the internet should be dithered.

There are times, like in e-commerce, or a photography blog, when images need to be full color. In cases like these it would be daft to dither.

But this is not all the time, not even close.

Would the visitors of your site get more value out of a full color images than dithered images?

Or would they benefit more from faster loading times, and saving money on data?

For this site it's a no brainer.

Some places I'd like to see more dithering

News Sites and Magazines #

News sites and magazines use images to reinforce writing, or as proof that something really happened. Full color images are usually not needed for this.

Don't know about you, but dithered images wouldn't effect my news consumption at all.

I first learned about dithering from an online magazine, that runs off a solar panel: Low Tech Magazine. Sending dithered images uses less power.

Blogs #

Many blog posts (including this one), start with a big eye-catching image. This is often a stock image vaguely related to the topic.

sterile-office.jpg strong-handshake.jpg sunset.jpg

A reasonable argument could be made that these images should just be deleted. But if you really need to catch eyes...dither them.

How to dither images? #

You can use Dither Me This, a tool I made to dither images.

If you're working with a static site generator. I'm currently working on version of Dither Me This for node that will dither images at build time.

Sources

  1. HTTP Archive - State of Images
  2. Computer History – Timeline of Computer History
  3. Visual Capitalist – Cost of Mobile Data Worldwide
  4. BBC – Why your internet habits are not as clean as you think
published
19 Dec 2020
modified
30 Dec 2020
author
Nathaniel
tags
posts web performance images dog doodad