I thought HEVC already came with a way to encode images (HEIF)? I don't have any experience in this space so I am probably missing something obvious, but I thought HEVC technology was being used for images for a while.
Indeed, I was looking at encoding black-and-white manga, and I dialed in the quality knob based on "Is the text crisp" "Are cross-hatching textures reasonably preserved" and "Lack of visible artifacts around the edges."
I then compared the file sizes and JP2K won hands down. It also had the advantage of already being supported in PDF, so I can just bundle them up into a PDF for relatively[1] easy reading.
[edit]
Someone pointed me to "Squoosh" and AVIF (which was still very experimental when I previously ran the tests; there was only a single encoder I could find, it took forever and crashed a lot) seems to win over JP2K; a quick estimate makes it look about 30% smaller (My first test image showed up at almost 50% smaller when I tuned it, but experience tells me that I need some padding if I'm just going to point it at a large directory tree).
1: A few PDF readers have failed to properly render the JP2K pages, but modern poppler and muPDF based readers both seem to handle it fine.
I suppose that's what happens with a format originally designed for video --- things that wouldn't be noticeable in a split-second frame but increase compression are valued, whereas in a still image format, it's to be avoided.
A natural question I've pondered from time to time is whether Fabrice Bellard is really a time traveler from a more advanced civilization in the future, sent back in time to show us, mere mortals, what humankind will be capable of in the future.
If this sounds far-fetched, consider that he has created not only BPG, but FFMPEG, QEMU, LibBF, SoftFP, TinyEMU, a software implementation of 4G/LTE, a PC emulator in Javascript, the TCC compiler, TinyGL, LZEXE, a tiny program for computing the biggest known prime number, and NNCP, a clever lossless data compression system using deep neural networks (transformers, to be precise). And that's just a partial list of his successful projects.
Any of these projects, on its own, would be considered a notable achievement for an ordinary human being.
This just proves how the following has happened without many noticing:
Fabrice Bellard has released an Artificial Neural Networks library, LibNC, "C Library for Tensor Manipulation" ( https://bellard.org/libnc/ ). Similar to PyTorch, but in sheer C.
It's the library behind that data compressor mentioned: we do not just have the compressor, he gave us the very AI tool. If that does not make one ecstatic... Summary of features:
> * C API ; * Small library, no external dependency, available for Linux and Windows ; * Define-by-run automatic differentiation engine (same idea as PyTorch) ; * High performance for both CPU (x86) and GPU (CUDA support). Optimized support of float32 and bfloat16 data types ; * CPU backend optimized for inference and small batch sizes ; * Optimized for online learning (i.e. simultaneous evaluation and training) using LSTM or Transformer models ; * Fully deterministic: return the same results at each run ; * Reproducible results (CPU backend only): return the same results regardless the CPU brand and OS
I cannot figure out if Bellard’s creations are hobby projects or serious production libraries.
This one has a couple of issues: browsers have already settled on AVIF. And HEVC is patent encumbered which makes it not a good choice for deploying on devices.
I remember one of the thing we expected to happen with asm.js ( Now Wasm ) was we could swap any new image format decoder. So we could have rapid iteration of image codec. This hasn't happened though.
35 comments
[ 2.4 ms ] story [ 89.6 ms ] threadIt's been in widespread real-world use since at least 2017, when HEIF support was added to the built-in camera app in iOS 11.
I then compared the file sizes and JP2K won hands down. It also had the advantage of already being supported in PDF, so I can just bundle them up into a PDF for relatively[1] easy reading.
[edit]
Someone pointed me to "Squoosh" and AVIF (which was still very experimental when I previously ran the tests; there was only a single encoder I could find, it took forever and crashed a lot) seems to win over JP2K; a quick estimate makes it look about 30% smaller (My first test image showed up at almost 50% smaller when I tuned it, but experience tells me that I need some padding if I'm just going to point it at a large directory tree).
1: A few PDF readers have failed to properly render the JP2K pages, but modern poppler and muPDF based readers both seem to handle it fine.
https://eclipseo.github.io/image-comparison-web
If this sounds far-fetched, consider that he has created not only BPG, but FFMPEG, QEMU, LibBF, SoftFP, TinyEMU, a software implementation of 4G/LTE, a PC emulator in Javascript, the TCC compiler, TinyGL, LZEXE, a tiny program for computing the biggest known prime number, and NNCP, a clever lossless data compression system using deep neural networks (transformers, to be precise). And that's just a partial list of his successful projects.
Any of these projects, on its own, would be considered a notable achievement for an ordinary human being.
Source: https://bellard.org
...and he has also written a JS interpreter: https://news.ycombinator.com/item?id=20411154
Absolutely astonishing!! A bit like the Bobby Fisher of programming ;)
Fabrice Bellard has released an Artificial Neural Networks library, LibNC, "C Library for Tensor Manipulation" ( https://bellard.org/libnc/ ). Similar to PyTorch, but in sheer C.
It's the library behind that data compressor mentioned: we do not just have the compressor, he gave us the very AI tool. If that does not make one ecstatic... Summary of features:
> * C API ; * Small library, no external dependency, available for Linux and Windows ; * Define-by-run automatic differentiation engine (same idea as PyTorch) ; * High performance for both CPU (x86) and GPU (CUDA support). Optimized support of float32 and bfloat16 data types ; * CPU backend optimized for inference and small batch sizes ; * Optimized for online learning (i.e. simultaneous evaluation and training) using LSTM or Transformer models ; * Fully deterministic: return the same results at each run ; * Reproducible results (CPU backend only): return the same results regardless the CPU brand and OS
Has the patent situation changed any since then? I wouldn't expect so.
I remember one of the thing we expected to happen with asm.js ( Now Wasm ) was we could swap any new image format decoder. So we could have rapid iteration of image codec. This hasn't happened though.