tinf
pics
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
tinf
-
Hello, PNG
CRC is a table and 5 lines of code. That's trivial.
>zlib is 23k lines
It's not needed to make a PNG reader/writer. zlib is massive overkill for only making a PNG reader or writer. Here's a tiny deflate/inflate code [2] under 1k lines (and could be much smaller if needed).
stb[0] has single headers of ~7k lines total including all of the formats PNG, JPG, BMP,. PSD, GIF, HDR, and PIC. Here's [1] a 3k lines single file PNG version with tons if #ifdefs for all sorts of platforms. Removing those and I'd not be surprised if you could not do it in ~1k lines (which I'd consider quite simple compared to most of todays' media formats).
>Of course they're not common formats so you're stuck with complex formats like PNG
BMP is super common and easy to use anywhere.
I use flat image files all the time for quick and dirty stuff. They quickly saturate disk speeds and networking speeds (say recording a few decent speed cameras), and I've found PNG compression to alleviate those saturate CPU speeds (some libs are super slow, some are vastly faster). I've many times made custom compression formats to balance these for high performance tools when neither things like BMPs or things like PNG would suffice.
[0] https://github.com/nothings/stb
[1] https://github.com/richgel999/fpng/blob/main/src/fpng.cpp
[2] https://github.com/jibsen/tinf/tree/master/src
-
EzGz - An easy to use single header no dependency library for decompression of .gz archives written in modern C++ (probably faster than zlib)
Right now I'm using a C library (https://github.com/jibsen/tinf) due to size constraints. Adding a few hundred kB is prohibitive in that space.
pics
- Hello, PNG
-
can’t be the only one
Using this framework, you can started with some excercises or dig into some file formats if you want something different (many file format have segments with variable length so the header will provide either offset or length which makes a good execercise for understanding pointer arithmetic).
- Binary Posters
-
How to generate an object file (and later an exe) from assembly
And this is not official, but you'll probably like it: https://github.com/corkami/pics/tree/master/binary/pe101
-
An MP4 file first draft
Author's github: https://github.com/corkami/pics
He works on things like hash collisions, image files that contain an image of their own hash, "polyglot" files and such like.
I think this is intended as a "minimum viable mp4 file" to show what the required binary parts are.
- Computing Posters
- ELF 101 a Linux Executable Walkthrough by Ange Albertini [pdf]
-
Fantastic Symbols and Where to Find Them - Part 1
ELF Executable and Linkable Format diagram by Ange Albertini
What are some alternatives?
Stm32-FatFs-Gzip - This project offers a simplified compressor that produces Gzip-compatible output with small resources for microcontrollers and edge computers. He uses the very basic LZ77 compression algorithm and static Deflate Huffman tree encoding to compress / decompress data into Gzip files.
pdftilecut - pdftilecut lets you sub-divide a PDF page(s) into smaller pages so you can print them on small form printers.
figlet-fonts - my collection of figlet / toilet ascii art fonts
Plex-Movie-Poster-Display - Scraps the Plex sessions page to display the current playing movie or TV show poster on a screen.
canvas_ity - A tiny, single-header <canvas>-like 2D rasterizer for C++
parca-agent - eBPF based always-on profiler auto-discovering targets in Kubernetes and systemd, zero code changes or restarts needed!
libpng - LIBPNG: Portable Network Graphics support, official libpng repository
MP4Inspector - A Chrome extension to help you inspect Mp4 video content and find irregularities in video streams.
fpng - Super fast C++ .PNG writer/reader
GpxTrackPoster - Create a visually appealing poster from your GPX tracks
UNITS - a compile-time, header-only, dimensional analysis and unit conversion library built on c++14 with no dependencies.
basis_universal - Basis Universal GPU Texture Codec