openjpeg
collagen
openjpeg | collagen | |
---|---|---|
7 | 3 | |
942 | 12 | |
0.7% | - | |
7.8 | 0.0 | |
9 days ago | 11 months ago | |
C | Rust | |
GNU General Public License v3.0 or later | MIT License |
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.
openjpeg
-
Can we make a guide for morons on how to install OpenEFT on a clean WSL install?
mkdir ~/install cd ~/install wget https://github.com/uclouvain/openjpeg/archive/master.zip unzip master.zip cd openjpeg-master/ mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release .. make sudo make install sudo make clean cd
-
We're still not game, but there has been progress. A progress report.
Details here, if you like reading bug reports. It took the cooperation of developers at all four levels to fix this. I wrote a test project to reproduce the problem, the jpeg2k developer was able to reproduce the problem under valgrind (a tool for finding bad pointer references in C, seldom needed by Rust users), an OpenJPEG developer fixed the C code, and everybody in the chain updated versions. Thanks to everyone who had a part in this.
-
Live2D Is a Security Trainwreck
> The whole file is effectively a write-what-where primitive2. In addition to that, the Count Info Table is not bounds checked either...
File formats like that, with many offsets in the file, are troublesome. There used to be more formats like that. Microsoft Word .doc is the classic example.
OpenJPEG 2000 has a similar problem. I just hit that yesterday.[1] Valgrind is finding references to un-initialized data which affect control flow, and running the JPEG decoder on valid but truncated files (which is allowed) is causing bad memory reference crashes and errors.
New formats like this are rare. People have learned. A modern exception is Unreal Engine 5's Nanite has much offset data, and there may be an attack surface there for hostile game content. Nanite is a way to store a graphics mesh with both multiple levels of detail and common submeshes. It's a hierarchy of directed acyclic graphs, flattened into a linear file with offsets. And, sure enough, there are many crash reports. At least Unreal provides a validator for the format.
(If only C/C++ had slices in the language. Most of the things for which pointer arithmetic is used can be done with slices. Slices really are pointer arithmetic, with sanity.)
[1] https://github.com/uclouvain/openjpeg/issues/1459
-
We're not really game yet.
JPEG 2000 decoder crashes Trying to read files at reduced resolution crashes with memory access errors. This is jpeg2k (Rust) calling jpeg2000-sys (Rust glue to C foreign function interfaces) calling OpenJPEG (all C). The problem can now be reproduced at the C level alone, under Valgrind. The developers of the top two levels have been very helpful, but the trouble is down in the rather painful C code at the bottom. The OpenJPEG maintainers are way behind on fixes, despite being funded.
-
Is JPEG 2000 a preservation risk? (2013)
It certainly was a risk in 2013, when the open source libraries were slow and riddled with bugs. Today, there are two stable, well maintained and fast open source libraries available:
https://github.com/uclouvain/openjpeg
- What’s the best lossless image format?
collagen
-
Viral Memes: Vectorized and Free
I guess this is a good place to plug a project I worked on, https://github.com/rben01/collagen . It lets you compose raster images and SVG shapes (including text) into another SVG, without re-encoding anything into a raster image. It's all just SVG. (Raster images are included via data: urls.)
I bring it up here because it's flip side of TFA. Instead of vectorizing memes, you can just take any old image you have, or a link to an image, and stick it in an SVG with some text on top, without actually having to write the SVG by hand. So an input like [this](https://gist.github.com/rben01/c0f51d8481c3ba8bd0ac108ac0b5a...) produces an output like [this](https://gist.github.com/rben01/23d01aa2668acc64cf4cffa815cb9...) (YMMV whether a linked image works in an SVG; I think in secure contexts it doesn't, but if you just copy paste the SVG into JSFiddle it should work).
Much easier than crafting memes by hand.
-
What’s the best lossless image format?
I guess this would be a good time to plug a small project I worked on: https://github.com/rben01/collagen . I got tired of seeing how crappy text looked when placed on a JPEG (due to the compression artifacts) and how large some PNGs were because they had a small JPEG-like area, so I made a little CLI program that solves that problem. Rather than settle on any particular image format, it allows the user to provide a collection of inputs -- images (in any format your browser supports), SVGs, shapes, text -- and bundles them into a single SVG file (it base64 encodes the images). So if you want to scale a PNG and place it on top of a JPG, you... just do that, with SVG transforms and whatnot. It produces a single file and is a lot easier than writing out the SVG yourself, and is nearly as easy as opening up a tailor-made mage editor and doing it there. And it's really, truly lossless, as it doesn't touch any of the input data.
-
Pablo is a small, open-source JavaScript library for SVG
I’ve been working on a project that makes creating SVGs — with all assets embedded — as simple as possible. https://github.com/rben01/collagen
What are some alternatives?
grok - World's Leading Open Source JPEG 2000 Codec
qoi - The “Quite OK Image Format” for fast, lossless image compression
jpeg2000-decoder - Decodes JPEG 2000 images in a subprocess, for safety
neatvnc - A liberally licensed VNC server library with a clean interface
thirdroom - Open, decentralised, immersive worlds built on Matrix
ui-mock
jasper - Official Repository for the JasPer Image Coding Toolkit
pablo - Pablo is a lightweight, expressive JavaScript SVG library. Pablo creates interactive drawings with SVG (Scalable Vector Graphics), giving access to all of SVG's granularity and power.
libjxl - JPEG XL image format reference implementation