MozJPEG improves JPEG compression efficiency achieving higher visual quality and smaller file sizes at the same time

Overview

Mozilla JPEG Encoder Project Build Status

MozJPEG improves JPEG compression efficiency achieving higher visual quality and smaller file sizes at the same time. It is compatible with the JPEG standard, and the vast majority of the world's deployed JPEG decoders.

MozJPEG is a patch for libjpeg-turbo. Please send pull requests to libjpeg-turbo if the changes aren't specific to newly-added MozJPEG-only compression code. This project aims to keep differences with libjpeg-turbo minimal, so whenever possible, improvements and bug fixes should go there first.

MozJPEG is compatible with the libjpeg API and ABI. It is intended to be a drop-in replacement for libjpeg. MozJPEG is a strict superset of libjpeg-turbo's functionality. All MozJPEG's improvements can be disabled at run time, and in that case it behaves exactly like libjpeg-turbo.

MozJPEG is meant to be used as a library in graphics programs and image processing tools. We include a demo cjpeg command-line tool, but it's not intended for serious use. We encourage authors of graphics programs to use libjpeg's C API and link with MozJPEG library instead.

Features

  • Progressive encoding with "jpegrescan" optimization. It can be applied to any JPEG file (with jpegtran) to losslessly reduce file size.
  • Trellis quantization. When converting other formats to JPEG it maximizes quality/filesize ratio.
  • Comes with new quantization table presets, e.g. tuned for high-resolution displays.
  • Fully compatible with all web browsers.
  • Can be seamlessly integrated into any program that uses the industry-standard libjpeg API. There's no need to write any MozJPEG-specific integration code.

Releases

Compiling

See BUILDING. MozJPEG is built exactly the same way as libjpeg-turbo, so if you need additional help please consult libjpeg-turbo documentation.

Issues
  • Remove or rename JBOOLEAN_USE_MOZ_DEFAULTS

    Remove or rename JBOOLEAN_USE_MOZ_DEFAULTS

    It's poorly named. Not very useful. Not orthogonal with other options.

    "moz defaults" doesn't really mean anything (the real functionality is related to enabling more expensive encoding features, but you can't guess that from the name of the parameter). Now that moz defaults are in fact the default, this option became a way to switch to default settings of libjpeg 6b, so a better name would be JBOOLEAN_USE_LIBJPEG6B_DEFAULTS.

    libjpeg 6b default settings are a bit outdated now, so I wouldn't even encourage use of them by having such option. If somebody needs exact legacy defaults for compatibility, it's unlikely they'd take effort to use mozjpeg and then disable mozjpeg's features. If somebody needs them for specific purpose, e.g. single-pass encoding, there should be more specific settings to enable that.

    Overall I think it would be better to have a set of clearer, more specific options and not include a vague concept of "moz defaults" as part of the API.

    opened by kornelski 25
  • Optimize quantization tables

    Optimize quantization tables

    Currently the encoder switches between "JPEG default" and flat quantization tables based on the metric it is tuning for. There ought to be better tables, including tables tuned for each individual image.

    enhancement 
    opened by fbossen 20
  • Segfaults when compiled with LLVM/clang

    Segfaults when compiled with LLVM/clang

    Hi,

    we have noticed that mozjpeg compiled with clang-3.8.0 causes many segfaults i.e. firefox, dolphin. https://issues.openmandriva.org/show_bug.cgi?id=1560 https://issues.openmandriva.org/show_bug.cgi?id=1559

    Sources for uour mozjpeg package can be found here https://github.com/OpenMandrivaAssociation/mozjpeg

    bug 
    opened by tpgxyz 19
  • PNG support disabled in Windows binaries?

    PNG support disabled in Windows binaries?

    The Windows binaries generated from the 3.0 release source by following the instructions in BUILDING.txt does not appear to have PNG support enabled.

    When a PNG file is passed as input to cjpeg.exe, the following error message is displayed: Unrecognized input file format --- perhaps you need -targa

    I have manually compiled libpng and modified INCLUDE and LIBPATH, but that did not enable PNG support.

    I have also tried manually editing jconfig.h to set PNG_SUPPORTED macro, but this approach did not work either.

    bug 
    opened by hoon 16
  • Using trellis quantization without other options is tricky

    Using trellis quantization without other options is tricky

    Background: I'm trying to compress images at a specific DSSIM quality, and for that I need to try a few different JPEG quality levels, as quickly as possible.

    I wanted to enable trellis quantization (because it visibly affects the output), but disable all other slow optimizations, since I don't look at the file size when only measuring quality.

    However, using just trellis is tricky and I didn't find documentation for it.

    I've tried:

    jpeg_set_defaults(&cinfo);
    jpeg_c_set_bool_param(&cinfo, JBOOLEAN_OPTIMIZE_SCANS, FALSE);
    cinfo.optimize_coding = FALSE;
    

    but there appears to be non-obvious coupling between trellis and progressive scan optimization:

    Invalid progressive parameters at scan script entry 4

    An alternative approach doesn't work either:

    jpeg_c_set_bool_param(&cinfo, JBOOLEAN_USE_MOZ_DEFAULTS, FALSE); 
    jpeg_set_defaults(&cinfo);
    jpeg_c_set_bool_param(&cinfo, JBOOLEAN_TRELLIS_QUANT, TRUE);
    

    Bogus buffer control mode

    I think the current settings are too low-level and don't hide implementation details of the library. I shouldn't be required to know that one setting depends on some other, seemingly unrelated settings. Flipping a single option on or off should do just that — not crash the library.

    So if I just execute jpeg_c_set_bool_param(&cinfo, JBOOLEAN_TRELLIS_QUANT, TRUE) I expect that to automatically enable everything that trellis depends on behind the scenes, and not crash.

    enhancement 
    opened by kornelski 14
  • Complete quoting for parameters of some CMake commands

    Complete quoting for parameters of some CMake commands

    Some parameters (like "${CMAKE_SOURCE_DIR}" and "${CMAKE_CURRENT_BINARY_DIR}") are passed to CMake commands in your build scripts without enclosing them by quotation marks. I see that these places will result in build difficulties if the contents of the used variables will contain special characters like spaces.

    I would recommend to apply advices from a Wiki article.

    opened by elfring 13
  • Deringing via overshoot clipping

    Deringing via overshoot clipping

    This improves compression of black-on-white text and line art with sharp edges as mentioned in #7

    The trick is essentially based on making white areas even whiter, so that ringing artefacts mostly remain above the maximum level of white, and are hidden by clipping done in the decoder (all JPEG decoders must perform clipping, because even standard encoding accidentally creates overshoot values).

    I've described it in more detail: https://pornel.net/deringing/

    This implementation works for black-on-white details (positive overshoot) only, and doesn't attempt to do anything for white-on-black details (negative overshoot). This is because sRGB gamma makes ringing artefacts much more visible on white background than on black background.

    This JPEG has the same file size as well-optimized PNG source. Notice how area around black lines is cleaner on white background than on color background: test-80-smbc2-catf

    enhancement 
    opened by kornelski 12
  • `mozjpeg` compared with `jpegoptim`

    `mozjpeg` compared with `jpegoptim`

    I am using mozjpeg for a few months (and I like it !). Recently, I compared with jpegoptim on simple images (typically one object on white background). I successfully target the same low size, achieving good quality (like low quality in https://imageoptim/online).

    For non-specialists, is there general simple rules to help choose between mozjpeg and jpegoptim ?

    opened by zeroheure 11
  • how to resize in windows?

    how to resize in windows?

    Please write in usage.txt how to perform resize 50% in.jpg out.jpg

    don`t work:

    jpegtran.exe -scale 1/2 in.jpg -outfile out.jpg
    djpeg.exe -scale 1/2 in.jpg > out.jpg
    
    opened by higimo 11
  • bad encoding of black letters on white background

    bad encoding of black letters on white background

    Original comment containing links to test images: https://news.ycombinator.com/item?id=8807536

    Problem spotted: https://news.ycombinator.com/item?id=8807554

    Images: http://i.imgur.com/DTxTcLp.jpg http://i.imgur.com/jVESWGS.jpg

    opened by bdaehlie 11
  • Adjust quantization tables for high-resolution displays

    Adjust quantization tables for high-resolution displays

    There is a trick used when compressing images for high-DPI ("Retina") displays: because details are less visible in higher resolution (or when resampled on lower-resolution displays), the image can tolerate higher level of compression.

    http://filamentgroup.com/lab/compressive-images.html http://gogrowstrategies.com/compressive-images/

    Unfortunately in libjpeg the quantization tables are derived from default tables by proportionally scaling all coefficients.

    The problem with that is that very low quality settings cause DC to be quantized too heavily, virtually guaranteeing that the image will look blocky and posterized. Giving bits to ACs can't help if the DC is awful.

    My suggestion is:

    • Tweak the algorithm in jpeg_add_quant_table to quantize DC and the first few ACs less when the quality is very low.
    • Add a switch to cjpeg for optimization for high-dpi displays. It'd adjust quality scale (lower the quality), quantization tables (protect DC from getting too blocky) and perhaps adjust the lambda for trellis.

    The implementation I've done https://github.com/pornel/mozjpeg/commit/615652b81a8e93c50d5ec72a0f1a29e5af71ee1e just increases DC and the first few ACs. It does work, but maybe an even more elegant approach would be to devise quantization tables optimized for low and high qualities and crate final quantization table from interpolation between these tables.

    enhancement 
    opened by kornelski 11
  • Release new versions more frequently

    Release new versions more frequently

    Hello :)

    AFAIK most projects use the latest tagged version of mozjpeg. Because mozjpeg hasn't released an update in quite a while, all of these projects are missing out on ~1.5 years of improvements in both mozjpeg and libjpeg-turbo. Examples: sharp, homebrew, slackware, winlib.

    I even found a case where libjpeg-turbo was chosen instead of mozjpeg because the latter seemed outdated. I would hate to see that become a trend.

    Would it be possible for you to release newer versions more frequently? If you could do a release approximately every 6 months, then I think that would be completely fine.

    Thank you! And please let me know if I'm missing something here.

    opened by atjn 0
  • ✖ Error: Command failed: /bin/sh -c ./configure --enable-static --disable-shared --disable-dependency-tracking --with-jpeg8  --prefix=

    ✖ Error: Command failed: /bin/sh -c ./configure --enable-static --disable-shared --disable-dependency-tracking --with-jpeg8 --prefix="/home/csg/node_modules/mozjpeg/vendor" --bindir="/home/csg/overreact/node_modules/mozjpeg/vendor" --libdir="mozjpeg/vendor"

    Directory: /home/csg/github/overreacted.io/node_modules/mozjpeg
    Output:
    ⚠ connect ECONNREFUSED 0.0.0.0:443
      ⚠ mozjpeg pre-build test failed
      ℹ compiling from source
      ✖ Error: Command failed: /bin/sh -c ./configure --enable-static --disable-shared --disable-dependency-tracking --with-jpeg8  --prefix="/home/csg/github/overreacted.io/node_modules/mozjpeg/vendor" --bindir="/home/csg/github/overreacted.io/node_modules/mozjpeg/vendor" --libdir="/home/csg/github/overreacted.io/node_modules/mozjpeg/vendor"
    ./configure: line 14675: PKG_PROG_PKG_CONFIG: command not found
    ./configure: line 14933: syntax error near unexpected token `libpng,'
    ./configure: line 14933: `PKG_CHECK_MODULES(libpng, libpng, HAVE_LIBPNG=1,'
    
    opened by nocsg 1
  • Need help for jpeg

    Need help for jpeg

    Hi, I repaired some jpeg encrypted jpeg by ransomware ( encrypted 150kb of header ) but when i move the good header to corrupt jpeg, how can i fix the color of this jpeg: DSC_0019

    opened by cuuhodrc 7
  • Cannot build mozjpeg on Alpine Linux

    Cannot build mozjpeg on Alpine Linux

    Reproduction

    docker run --rm -i alpine:3.14.0 sh <<EOS &> output.txt
    set -euo pipefail
    apk add cmake make gcc musl-dev curl nasm libpng-dev zlib-dev
    cd ~
    curl -LSs https://github.com/mozilla/mozjpeg/archive/refs/tags/v4.0.3.tar.gz | tar -xz
    mkdir build
    cd build
    cmake -G"Unix Makefiles" ../mozjpeg-4.0.3
    EOS
    
    output.txt
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
    (1/35) Installing libacl (2.2.53-r0)
    (2/35) Installing libbz2 (1.0.8-r1)
    (3/35) Installing expat (2.4.1-r0)
    (4/35) Installing lz4-libs (1.9.3-r0)
    (5/35) Installing xz-libs (5.2.5-r0)
    (6/35) Installing zstd-libs (1.4.9-r1)
    (7/35) Installing libarchive (3.5.1-r0)
    (8/35) Installing ca-certificates (20191127-r5)
    (9/35) Installing brotli-libs (1.0.9-r5)
    (10/35) Installing nghttp2-libs (1.43.0-r0)
    (11/35) Installing libcurl (7.77.0-r1)
    (12/35) Installing ncurses-terminfo-base (6.2_p20210612-r0)
    (13/35) Installing ncurses-libs (6.2_p20210612-r0)
    (14/35) Installing libgcc (10.3.1_git20210424-r2)
    (15/35) Installing rhash-libs (1.4.1-r0)
    (16/35) Installing libstdc++ (10.3.1_git20210424-r2)
    (17/35) Installing libuv (1.41.0-r0)
    (18/35) Installing cmake (3.20.3-r0)
    (19/35) Installing curl (7.77.0-r1)
    (20/35) Installing binutils (2.35.2-r2)
    (21/35) Installing libgomp (10.3.1_git20210424-r2)
    (22/35) Installing libatomic (10.3.1_git20210424-r2)
    (23/35) Installing libgphobos (10.3.1_git20210424-r2)
    (24/35) Installing gmp (6.2.1-r0)
    (25/35) Installing isl22 (0.22-r0)
    (26/35) Installing mpfr4 (4.1.0-r0)
    (27/35) Installing mpc1 (1.2.1-r0)
    (28/35) Installing gcc (10.3.1_git20210424-r2)
    (29/35) Installing libpng (1.6.37-r1)
    (30/35) Installing pkgconf (1.7.4-r0)
    (31/35) Installing zlib-dev (1.2.11-r3)
    (32/35) Installing libpng-dev (1.6.37-r1)
    (33/35) Installing make (4.3-r0)
    (34/35) Installing musl-dev (1.2.2-r3)
    (35/35) Installing nasm (2.15.05-r0)
    Executing busybox-1.33.1-r2.trigger
    Executing ca-certificates-20191127-r5.trigger
    OK: 185 MiB in 49 packages
    -- The C compiler identification is GNU 10.3.1
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: /usr/bin/cc - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- CMAKE_BUILD_TYPE = Release
    -- VERSION = 4.0.3, BUILD = 20210701
    -- 64-bit build (x86_64)
    -- CMAKE_INSTALL_PREFIX = /opt/mozjpeg
    -- CMAKE_INSTALL_BINDIR = bin (/opt/mozjpeg/bin)
    -- CMAKE_INSTALL_DATAROOTDIR =  (/opt/mozjpeg)
    -- CMAKE_INSTALL_DOCDIR = doc (/opt/mozjpeg/doc)
    -- CMAKE_INSTALL_INCLUDEDIR = include (/opt/mozjpeg/include)
    -- CMAKE_INSTALL_LIBDIR = lib64 (/opt/mozjpeg/lib64)
    -- CMAKE_INSTALL_MANDIR = man (/opt/mozjpeg/man)
    -- Shared libraries enabled (ENABLE_SHARED = 1)
    -- Static libraries enabled (ENABLE_STATIC = 1)
    -- 12-bit JPEG support disabled (WITH_12BIT = 0)
    -- Arithmetic decoding support disabled (WITH_ARITH_DEC = 0)
    -- Arithmetic encoding support disabled (WITH_ARITH_ENC = 0)
    -- TurboJPEG API library enabled (WITH_TURBOJPEG = 1)
    -- TurboJPEG Java wrapper disabled (WITH_JAVA = 0)
    -- In-memory source/destination managers enabled (WITH_MEM_SRCDST = 1)
    -- Emulating libjpeg API/ABI v6.2 (WITH_JPEG7 = 0, WITH_JPEG8 = 0)
    -- libjpeg API shared library version = 62.3.0
    -- Compiler flags =  -O3 -DNDEBUG
    -- Linker flags =  
    -- Looking for sys/types.h
    -- Looking for sys/types.h - found
    -- Looking for stdint.h
    -- Looking for stdint.h - found
    -- Looking for stddef.h
    -- Looking for stddef.h - found
    -- Check size of size_t
    -- Check size of size_t - done
    -- Check size of unsigned long
    -- Check size of unsigned long - done
    -- Performing Test HAVE_BUILTIN_CTZL
    -- Performing Test HAVE_BUILTIN_CTZL - Success
    -- Looking for include file locale.h
    -- Looking for include file locale.h - found
    -- Looking for include file stdlib.h
    -- Looking for include file stdlib.h - found
    -- Looking for include file sys/types.h
    -- Looking for include file sys/types.h - found
    -- Looking for memset
    -- Looking for memset - found
    -- Looking for memcpy
    -- Looking for memcpy - found
    -- Check size of unsigned char
    -- Check size of unsigned char - done
    -- Check size of unsigned short
    -- Check size of unsigned short - done
    -- Performing Test INCOMPLETE_TYPES
    -- Performing Test INCOMPLETE_TYPES - Success
    -- Compiler supports pointers to undefined structures.
    -- Performing Test RIGHT_SHIFT_IS_UNSIGNED
    -- Performing Test RIGHT_SHIFT_IS_UNSIGNED - Failed
    -- Performing Test __CHAR_UNSIGNED__
    -- Performing Test __CHAR_UNSIGNED__ - Failed
    -- Performing Test INLINE_WORKS
    -- Performing Test INLINE_WORKS - Success
    -- INLINE = __inline__ __attribute__((always_inline)) (FORCE_INLINE = 1)
    -- Performing Test HAVE_THREAD_LOCAL
    -- Performing Test HAVE_THREAD_LOCAL - Success
    -- THREAD_LOCAL = __thread
    -- Performing Test HAVE_VERSION_SCRIPT
    -- Performing Test HAVE_VERSION_SCRIPT - Success
    -- Linker supports GNU-style version scripts
    -- CMAKE_EXECUTABLE_SUFFIX = 
    -- Looking for a ASM_NASM compiler
    -- Looking for a ASM_NASM compiler - /usr/bin/nasm
    -- The ASM_NASM compiler identification is NASM
    -- Found assembler: /usr/bin/nasm
    -- CMAKE_ASM_NASM_COMPILER = /usr/bin/nasm
    -- CMAKE_ASM_NASM_OBJECT_FORMAT = elf64
    -- CMAKE_ASM_NASM_FLAGS =  -DELF -D__x86_64__ -DPIC 
    -- SIMD extensions: x86_64 (WITH_SIMD = 1)
    -- PNG reading support enabled (PNG_SUPPORTED = 1)
    -- Found ZLIB: /lib/libz.so (found version "1.2.11") 
    -- Found PNG: /usr/lib/libpng.so (found suitable version "1.6.37", minimum required is "1.6") 
    -- PNG reading support enabled (PNG_SUPPORTED = 1)
    -- Could NOT find ZLIB (missing: ZLIB_LIBRARY) (found version "1.2.11")
    CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
      Could NOT find PNG (missing: PNG_LIBRARY) (Required is at least version
      "1.6")
    Call Stack (most recent call first):
      /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
      /usr/share/cmake/Modules/FindPNG.cmake:159 (find_package_handle_standard_args)
      CMakeLists.txt:698 (find_package)
    
    
    -- Configuring incomplete, errors occurred!
    See also "/root/build/CMakeFiles/CMakeOutput.log".
    See also "/root/build/CMakeFiles/CMakeError.log".
    

    Description

    In output.txt, there are some weird error messages that I think make little sense:

    -- Found ZLIB: /lib/libz.so (found version "1.2.11") 
    -- Found PNG: /usr/lib/libpng.so (found suitable version "1.6.37", minimum required is "1.6") 
    -- PNG reading support enabled (PNG_SUPPORTED = 1)
    -- Could NOT find ZLIB (missing: ZLIB_LIBRARY) (found version "1.2.11")
    CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
      Could NOT find PNG (missing: PNG_LIBRARY) (Required is at least version
      "1.6")
    

    Although I have installed both zlib-dev and libpng-dev, and cmake can also find where I installed. (/usr/lib/libpng.so and /lib/libz.so respectively), somehow cmake keeps arguing it cannot find ZLIB_LIBRARY PNG_LIBRARY.

    Workaround

    A workaround is to disable png support by -D PNG_SUPPORTED=FALSE, for example, the following command can build successfully:

    docker run --rm -i alpine:3.14.0 sh <<EOS
    set -euo pipefail
    apk add cmake make gcc musl-dev curl nasm
    cd ~
    curl -LSs https://github.com/mozilla/mozjpeg/archive/refs/tags/v4.0.3.tar.gz | tar -xz
    mkdir build
    cd build
    cmake -G"Unix Makefiles" -D PNG_SUPPORTED=FALSE ../mozjpeg-4.0.3
    EOS
    

    Question

    I wonder how I can build mozjpeg with png support? Did I miss anything?

    I would appreciate your help.

    opened by tonytonyjan 2
Releases(v4.0.3)
  • v4.0.0(Nov 13, 2020)

    Rebased MozJPEG changes on libjpeg-turbo v2, which includes lots of bug fixes and performance improvements.

    Because libjpeg-turbo has switched to cmake, MozJPEG has too. MozJPEG can now be built using either cmake or Cargo.

    Source code(tar.gz)
    Source code(zip)
  • v4.0.1-rc(Sep 1, 2020)

  • v3.3.1(Mar 17, 2018)

  • v3.2(May 1, 2017)

    • Updated to libjpeg-turbo 1.5.0.
    • Fixed interaction of JINT_DC_SCAN_OPT_MODE and JBOOLEAN_OPTIMIZE_SCANS (#249)
    • #define JPEG_C_PARAM_SUPPORTED 1 for easier interoperability with stock libjpeg
    • Minor bugfixes in yuvjpeg/jpegyuv test helper tools.
    • the cjpeg demo tool guesses default -sample setting from -quality
    Source code(tar.gz)
    Source code(zip)
    mozjpeg-3.2-release-source.tar.gz(1.55 MB)
  • v3.2-pre(Feb 13, 2017)

  • v3.1(May 19, 2015)

    • Improved effectiveness of DC trellis in high-quality images
    • Fixed DC overflow caused by overshoot deringing feature
    • Fixed reading of 16-bit PNG images
    • Fixed memory leaks in jpegyuv and jpegtran utilities
    • Added cjpeg -quant-baseline option to reduce size of quantization tables
    • Merged patches up to libjpeg-turbo r1482
    Source code(tar.gz)
    Source code(zip)
    mozjpeg-3.1-release-source.tar.gz(1.47 MB)
  • v3.0(Dec 30, 2014)

    NOTE: This release includes significant changes to the mozjpeg ABI in order to return to ABI compatibility with libjpeg-turbo. See the file ‘README-mozilla.txt’ for more information.

    • mozjpeg is now backward ABI-compatible with libjpeg-turbo. See ‘README-mozilla.txt’ for more information.
    • DC trellis quantization (compression improvement)
    • Merge successive DQT (FFDB) and DHT (FFC4) markers in a single marker (compression improvement)
    • Deringing for black-on-white text
    • Option to select quantization tables
    • New cjpeg flag ‘-version’ to obtain version
    • PNG input support for cjpeg
    • Various other improvements from syncing with latest libjpeg-turbo code
    Source code(tar.gz)
    Source code(zip)
    mozjpeg-3.0-release-source.tar.gz(1.45 MB)
  • v2.1(Jul 31, 2014)

    • The ‘-baseline’ option for cjpeg has been re-defined to produce baseline mode JPEGs. This makes it possible to produce baseline JPEGs with cjpeg while also using trellis quantization and other improvements. Previously the ‘-baseline’ flag simply specified that baseline quantization tables be used, and the only way to produce a baseline mode JPEG was to use the ‘-revert’ option.
    • Fix for using trellis quantization in non-progressive mode
    • Build fixes for various platforms
    • More helpful error messages from cjpeg
    • Various other minor fixes
    Source code(tar.gz)
    Source code(zip)
  • v2.0.1(Jul 15, 2014)

  • v2.0(Jul 15, 2014)

    • We’ve implemented trellis quantization to reduce file sizes for both baseline and progressive images.
    • The cjpeg utility now supports JPEG input in order to simplify re-compression workflows.
    • We’ve added options to specifically tune for PSNR, PSNR-HVS-M, SSIM, and MS-SSIM metrics.
    • We now generate a single DC scan by default in order to be compatible with decoders that can’t handle arbitrary DC scans.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Mar 28, 2014)

  • v1.0(Mar 5, 2014)

    mozjpeg v1.0 is a fork of libjpeg-turbo with 'jpgcrush' functionality built in.

    The 'jpgcrush' feature finds the progressive coding configuration which uses the fewest bits. This most frequently reduces file size by 2-10%, but those are not hard limits. Significantly greater reductions have been observed.

    Library configuration defaults are the same as for libjpeg-turbo, in order to make transitions as painless as possible. There are new configuration options for new features, but they are not enabled by default.

    The 'cjpeg' program defaults are not the same as for the equivalent program in libjpeg-turbo. The 'cjpeg' defaults for mozjpeg are set to aggressively optimize for smaller file sizes.

    Source code(tar.gz)
    Source code(zip)
Owner
Mozilla
This technology could fall into the right hands.
Mozilla
High Quality DeNoise 3D is an AviSynth port of the MPlayer filter of the same name

High Quality DeNoise 3D is an AviSynth port of the MPlayer filter of the same name. It performs a 3-way low-pass filter, which can completely remove high-frequency noise while minimizing blending artifacts.

null 12 Jun 7, 2022
PoC that fixes two GTA Online bugs and drastically improves load times for CPU-bound systems

Project status Officially fixed by R* 2021-03-16 :) PoC that fixes two GTA Online bugs and drastically improves load times for CPU-bound systems All a

null 2.8k Jul 29, 2022
SMOL-V: like Vulkan/Khronos SPIR-V, but smaller.

SMOL-V: like Vulkan/Khronos SPIR-V, but smaller. Overview SMOL-V encodes Vulkan/Khronos SPIR-V format programs into a form that is smoller, and is mor

Aras Pranckevičius 266 Jun 20, 2022
A Gen implementation in C. With memory efficiency, portability and speed in mind

A Gen implementation in C. With memory efficiency, portability and speed in mind

Gen Programming Language 3 Jul 31, 2022
A version of Tetris with randomly generated polyominoes of varying sizes

Multris A version of Tetris with randomly generated polyominoes of varying sizes ----- CONTROLS ----- LEFT / RIGHT ARROW - Move. Hold to move quicker.

null 17 Jun 29, 2022
This project helps a person park their car in their garage in the same place every time.

garage-parking-sensor Description This project is developed to help a person park their car in their garage in the same place every time. Normally peo

Calvin Pereira 2 Sep 13, 2021
RRxIO - Robust Radar Visual/Thermal Inertial Odometry: Robust and accurate state estimation even in challenging visual conditions.

RRxIO - Robust Radar Visual/Thermal Inertial Odometry RRxIO offers robust and accurate state estimation even in challenging visual conditions. RRxIO c

Christopher Doer 56 Jul 26, 2022
Visual Leak Detector for Visual C++ 2008-2015

Visual Leak Detector Introduction Visual C++ provides built-in memory leak detection, but its capabilities are minimal at best. This memory leak detec

Arkady Shapkin 870 Aug 5, 2022
Second life for famous JPEGView - fast and tiny viewer/editor for JPEG, BMP, PNG, WEBP, TGA, GIF and TIFF images with a minimalist GUI and base image processing.

JPEGView-Image-Viewer-and-Editor Updated Dec 07 2021. Version 1.1.1.0 has been released. Download link1, link2 added. Second life for famous JPEGView

Ann Hatt 25 Aug 5, 2022
Quick fix to iphone usb tethering with ios14 or higher for Linux kernel lower than 5.10.4

Quick fix to Linux Iphone USB tethering with IOS 14 or higher (Tested with ubuntu 18.04, kernel 5.4.0-65, if you fail in the build, please download yo

null 23 Jul 8, 2022
Allows to join RDF of previous expansions on a higher character level

mod-rdf-expansion Allows to join RDF of previous expansions on a higher character level. Up to character level 58, you can join the "Random Classic Du

AzerothCore 3 Apr 3, 2022
Rangeless - c++ LINQ -like library of higher-order functions for data manipulation

rangeless::fn range-free LINQ-like library of higher-order functions for manipulation of containers and lazy input-sequences. Documentation What it's

null 183 Jul 19, 2022
JS/WASM build of libjxl (JPEG-XL)

libjxl-js JS/WASM build of libjxl (JPEG-XL) Try It Out! Try it in your browser here Building This project uses git submodules to pull in libjxl. If de

Chris Hafey 9 Mar 27, 2022
Single header lib for JPEG encoding. Public domain. C99. stb style.

tiny_jpeg.h A header-only public domain implementation of Baseline JPEG compression. Features: stb-style header only library. Does not do dynamic allo

Sergio Gonzalez 196 Jul 20, 2022
Continuous-Time Spline Visual-Inertial Odometry

Continuous-Time Spline Visual-Inertial Odometry Related Publications Direct Sparse Odometry, J. Engel, V. Koltun, D. Cremers, In IEEE Transactions on

Minnesota Interactive Robotics and Vision Laboratory 46 Aug 9, 2022
StarkScript - or the Stark programming language - is a compiled C-based programming language that aims to offer the same usability as that of JavaScript's and TypeScript's

StarkScript StarkScript - or the Stark programming language - is a compiled C-based programming language that aims to offer the same usability as that

EnderCommunity 5 May 10, 2022
This repo contains BOTH c++ and BP examples to acheive the same logic, but in each frameworks specific ways

ApparatusCppMoveRandomly Hey there! This repo contains BOTH c++ and BP examples to acheive the same logic, but in each frameworks specific ways. I int

null 2 Jan 24, 2022
Node.js Workers, except on the same thread

synchronous-worker – Run Node.js APIs synchronously Usage Example const w = new SynchronousWorker();

Anna Henningsen 66 Jul 18, 2022
Flutter app that syncs clipboards between devices in the same local network.

clipboard_sync A flutter app that syncs clipboards between devices in the same LAN using Interprocess communication (Sockets). What it does ? group of

Pushpavel 5 Oct 29, 2021