-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to achieve same quality as libjpeg? #13
Comments
The difference is due to chroma subsampling.
Search v_samp_factor here for more info https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/libjpeg.txt |
Thanks for your reponse! Do I understand it right that I should disable subsampling in order to achieve the desired result? I modified my code in the following way: let mut compressor = Compress::new(ColorSpace::JCS_EXT_RGBA);
compressor.set_quality(30.0);
compressor.set_size(320, 240);
let mut components = compressor.components_mut();
for component in components {
component.h_samp_factor = 1;
component.v_samp_factor = 1;
}
compressor.set_mem_dest();
compressor.start_compress();
compressor.write_scanlines(&scanlines);
compressor.finish_compress(); It led to a result that is closer to what I need, but still not quite the same: |
The rest is up to quality setting. MozJPEG defaults to quantization table optimized for photographic content, and not icons with sharp edges. |
I tried specifying every possible value for djpeg original.jpg | cjpeg -quality 30 -quant-table <N> -sample 1x1 > libjpeg_30.jpg However, then I noticed that djpeg original.jpg | cjpeg -revert -quality 30 > libjpeg_30.jpg For those wondering how to do it in Rust code, you need to call |
Please note that |
Thanks for clarifying that. At the current stage of my project this is exactly what I need, but later I'll be able to turn MozJPEG features back on as I won't need to match images produced by |
I'm working on a rendering utility that can save images as JPEGs with specified quality. For a weird reason, I need the images saved by my utility to look the same as the ones produced by
libjpeg
'scjpeg
. As there is no convenientlibjpeg
bindings for Rust, I'm usingmozjpeg-rust
, but the output looks very different for the same quality. Is it possible to configure the compressor inmozjpeg-rust
to make it look similar in terms of the amount of artefacts? This is an example of what the output images currently look like:libjpeg
mozjpeg
It's easy to notice that the
mozjpeg
one has much more artefacts thanlibjpeg
.The
libjpeg
image was produced by converting the image saved with 100 quality:Original
And this is how I call
mozjpeg-rust
from my code:PS: if it's currently not possible in
mozjpeg-rust
, but possible inmozjpeg
, that might help too.The text was updated successfully, but these errors were encountered: