Rendered at 11:03:29 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
mythz 20 hours ago [-]
Worth highlighting the QOI Image format (qoiformat.org) showing that you can also get significant image compression benefits with a simple 1-page specification [1]:
> QOI is fast. It losslessly compresses images to a similar size of PNG, while offering 20x-50x faster encoding and 3x-4x faster decoding.
> QOI is simple. The reference en-/decoder fits in about 300 lines of C. The file format specification is a single page PDF.
PNG compression is just DEFLATE. For archival storage, I've been expanding PNGs with `precomp` [0] and then running modern compression algorithms on them.
The opposite should also be possible with the ultimate formula a giant lookup table with all the images preloaded.
Could ofc also make decompression by trying a million things.
To exist the compressed file only needs a formula to validate the result. Like it being a type 42 image with this checksum. It might take a quantum computer to confirm existence.
I had a fun idea to skip pixels and rows and make a tiny image at the beginning of the file followed by almost identical images with different offset.
Like progressive jpeg the entire image is visible almost instantly.
They could for practical purposes be seperate files too.
For mobile devices you only need the first n images for higher resolution and/or larger displays you keep loading until the resolution is acceptable or the tiles run out.
It would be wonderful for thumbnails. Display say 32x32, pre-load 256x256 and continue loading when clicked.
benj111 2 hours ago [-]
>To exist the compressed file only needs a formula to validate the result. Like it being a type 42 image with this checksum. It might take a quantum computer to confirm existence
I interpret this to mean that the checksum is the compressed file?
Surely you'd need to compute checksums for all possible images to confirm that the checksums are unique.
You're calculating a perfect hash for an input that could be anything. That isn't going to be short or easy to confirm.
And then you've got the question of if it's worth it. Yes the hash could represent an image of random noise at the same size as a blank black image. But it's going to be larger than today's technology for representing that black image.
So for a lot of images it isn't worth it. I would guess(?) the average photo is a lot closer to ordered than unordered, so it isn't going to work there either.
lukevp 15 hours ago [-]
blur hash is an algorithm for a low res representation of an image for placeholder purposes, it's pretty nice. https://blurha.sh
mrngld 20 hours ago [-]
Don't sleep on JPEG XL. It's used under the hood within DNG files (at least, it's an option, Adobe DNG Converter can leverage it, including by the CLI), DxO PureRAW leverages it in the latest versions. Apple Photos can view them, and I think it's been the compression methodology used inside their ProRAW DNGs for a while (which probably by default makes it one of the worlds most popular image compressors for RAW files). I've had a lot of success using it for various things. Had some issues surrounding metadata but that may be user error on my part.
yboris 18 hours ago [-]
JPEG XL aka .jxl is now supported by Firefox 152 and Chrome since 145 (behind a flag though on both).
JXL is the best image format we have - supports lossy and lossless compression, HDR, and much more!
The format supports HDR, but most apps using it don’t.
I’ve given up trying to use JXL in the Apple ecosystems for exchanging HDR images for this reason.
thinkingQueen 14 hours ago [-]
Those are good venues to sneak JPEG XL into the mainstream. It would be a pity if it became another JPEG 2000. On the other hand, JPEG 2000 was probably just too advanced and computationally complex to be widely adopted at the time. Sometimes I look back at it and, after all the extensions and revisions, it feels like it has everything—but it’s still a niche codec. A cautionary tale, and a pattern that tends to repeat itself with codecs...
duskwuff 9 hours ago [-]
On top of being much more complex to encode and decode, and being encumbered by patents, JPEG 2000 was only marginally better than JPEG in terms of quality vs. size. At the time it came out, it wasn't worth using; nowadays it's thoroughly outclassed by any newer image codec (JPEG XL, WebP, HEIC, etc).
Narew 15 hours ago [-]
Disclaimer : I worked at DxO.
DNG is more a container in which you can store lots of different think and not only RAW images.
For example PureRaw output Linear DNG that is not a RAW anymore. In the same way ProRaw is not a RAW image dispite it's name. But yes PureRaw and some ProRaw are compressed internally with jxl.
CodesInChaos 20 hours ago [-]
> Now that WebP is widely supported by browsers and operating systems, there's really no downside to using it. It's much more flexible than JPEG or PNG and offers better compression than both of them.
I'd probably skip WebP, and go straight to AVIF at this point. I believe all modern browsers support it, and it compresses better than WebP.
AndrewStephens 19 hours ago [-]
> I'd probably skip WebP, and go straight to AVIF now.
That is my assessment as well. The compression ratios with AVIF are ridiculous compared to older formats.
conradkay 14 hours ago [-]
It's great but you definitely pay for it. Encoding can be really slow, and to a lesser extent decoding as well.
So I still end up using .jpg quite often, or .webp as a good middle ground
juliobbv 11 hours ago [-]
You can adjust how much "effort" the avif encoder puts on images.
The default speed in libavif (-s 6 in avifenc) is fast enough, and it has been used by big CDNs to encode AVIFs for years. You can make the encoder as fast or slow as you'd like, depending on your compute/compression efficiency trade-off requirements.
CodesInChaos 14 hours ago [-]
[dead]
pseudosavant 18 hours ago [-]
TIL that AVIF has been supported across all browsers since January 2024. Definitely looks like something I can start using.
thrw045 8 hours ago [-]
Personally I dislike all of these new formats. Shame that most big sites use either avif or webp. When I save these images to disk I always convert to png because storage isn't an issue and bandwidth isn't an issue. Oh well...
josephg 7 hours ago [-]
> storage isn't an issue and bandwidth isn't an issue. Oh well...
Right; the issue is compatibility. But that doesn't get solved if we collectively stick to the past and only use old formats like gif and jpeg. Compatibility gets fixed by using a format, and then complaining to software developers when their software isn't compatible with our workflows. Eventually compatibility improves, and we get our cake and eat it too. Better storage and bandwidth use. And compatibility across all our software.
It just takes time.
Self-Perfection 12 hours ago [-]
In lossless mode WebP is superior to AVIF.
mistercow 10 hours ago [-]
> More so than any other image format, JPEG takes advantage of the quirks of human perception to throw away information while largely preserving quality.
That is a very odd thing to say in a post that also mentions WebP. I would say that of all the commonly supported lossy image codecs released since 1992, JPEG takes the least advantage of human perception quirks.
casey2 10 hours ago [-]
webp doesn't preserve quality it actively makes the web and images shittier.
filup 4 days ago [-]
I love image and video compression. For fun, I made my own and managed to squeeze an image of myself into byte level file sizes.
It's amazing to me how we much we can fill in the blanks to make something recognizable with such little data.
stevefan1999 16 hours ago [-]
I still remember the multimedia course...DCT, JPEG and all the compression algorithms like Huffman coding and Arithmetic coding...
polalavik 18 hours ago [-]
holy smokes this whole website is beautiful and so well done.
01010101000 3 hours ago [-]
Render graphics in X11 or Wayland. Lossless FLAC, which
is in 44.1 kHz.
thm 21 hours ago [-]
I recently built a small image optimizer for macOS since ImageOptim is mostly abandonware now. Specifically for folks who dislike complex build tools for this job https://shiboru.com
Y-bar 20 hours ago [-]
ImageOptim seems mostly done though. What more does it need to do compared to what it claims to do?
Theodores 22 hours ago [-]
Most comprehensive write up of JPEG et al. I have ever come across.
I think the MozJPEG compression optimisations deserves a mention, as does where we started, with RLE encoding for printer things.
Also important for my personal understanding of JPEG is the context: slow CPUs and analogue screens. OG JPEG was optimised for this, MozJPEG changed the look up tables and the ubiquitous 'turbo' JPEG library to use a few more CPU cycles and save a few more bytes, whilst fixing the banding that was actually okay in the analogue days of old CRT monitors.
Bookmarked the article for re-reading.
sudo_cowsay 12 hours ago [-]
shouldn't people have learned this in high school cs?
> QOI is fast. It losslessly compresses images to a similar size of PNG, while offering 20x-50x faster encoding and 3x-4x faster decoding.
> QOI is simple. The reference en-/decoder fits in about 300 lines of C. The file format specification is a single page PDF.
[1] https://qoiformat.org/qoi-specification.pdf
[0] https://github.com/schnaader/precomp-cpp
Could ofc also make decompression by trying a million things.
To exist the compressed file only needs a formula to validate the result. Like it being a type 42 image with this checksum. It might take a quantum computer to confirm existence.
I had a fun idea to skip pixels and rows and make a tiny image at the beginning of the file followed by almost identical images with different offset.
Like progressive jpeg the entire image is visible almost instantly.
They could for practical purposes be seperate files too.
For mobile devices you only need the first n images for higher resolution and/or larger displays you keep loading until the resolution is acceptable or the tiles run out.
It would be wonderful for thumbnails. Display say 32x32, pre-load 256x256 and continue loading when clicked.
I interpret this to mean that the checksum is the compressed file?
Surely you'd need to compute checksums for all possible images to confirm that the checksums are unique.
You're calculating a perfect hash for an input that could be anything. That isn't going to be short or easy to confirm.
And then you've got the question of if it's worth it. Yes the hash could represent an image of random noise at the same size as a blank black image. But it's going to be larger than today's technology for representing that black image.
So for a lot of images it isn't worth it. I would guess(?) the average photo is a lot closer to ordered than unordered, so it isn't going to work there either.
JXL is the best image format we have - supports lossy and lossless compression, HDR, and much more!
https://jpegxl.info/
I’ve given up trying to use JXL in the Apple ecosystems for exchanging HDR images for this reason.
DNG is more a container in which you can store lots of different think and not only RAW images.
For example PureRaw output Linear DNG that is not a RAW anymore. In the same way ProRaw is not a RAW image dispite it's name. But yes PureRaw and some ProRaw are compressed internally with jxl.
I'd probably skip WebP, and go straight to AVIF at this point. I believe all modern browsers support it, and it compresses better than WebP.
That is my assessment as well. The compression ratios with AVIF are ridiculous compared to older formats.
So I still end up using .jpg quite often, or .webp as a good middle ground
The default speed in libavif (-s 6 in avifenc) is fast enough, and it has been used by big CDNs to encode AVIFs for years. You can make the encoder as fast or slow as you'd like, depending on your compute/compression efficiency trade-off requirements.
Right; the issue is compatibility. But that doesn't get solved if we collectively stick to the past and only use old formats like gif and jpeg. Compatibility gets fixed by using a format, and then complaining to software developers when their software isn't compatible with our workflows. Eventually compatibility improves, and we get our cake and eat it too. Better storage and bandwidth use. And compatibility across all our software.
It just takes time.
That is a very odd thing to say in a post that also mentions WebP. I would say that of all the commonly supported lossy image codecs released since 1992, JPEG takes the least advantage of human perception quirks.
It's amazing to me how we much we can fill in the blanks to make something recognizable with such little data.
I think the MozJPEG compression optimisations deserves a mention, as does where we started, with RLE encoding for printer things.
Also important for my personal understanding of JPEG is the context: slow CPUs and analogue screens. OG JPEG was optimised for this, MozJPEG changed the look up tables and the ubiquitous 'turbo' JPEG library to use a few more CPU cycles and save a few more bytes, whilst fixing the banding that was actually okay in the analogue days of old CRT monitors.
Bookmarked the article for re-reading.