Additional plug-ins and extensions for Java's ImageIO using native libraries

Overview

GitHub Workflow Status Maven Central Sonatype Nexus (Snapshots)

NightMonkeys

A collection of ImageIO plugins, adding support for newer image formats. NightMonkeys uses the newer Foreign Linker API available in JDK 18 to access native libraries.

How it works

NightMonkeys plugins are released as multi-release JARs:

  • with Java < 18, a no-op version of the plugin will unregister itself on load, basically doing nothing
  • with Java 18+, the plugin will be available

This lets you add the dependencies in your project whatever the JDK used, and still enable the plugin at runtime if the necessary JDK is used.

Supported formats

Plugin Format Read Write Metadata Notes
jxl Jpeg XL - -
webp WebP - -

Requirements

In order for the plugins to run properly, you will need to:

  • Run Java with the following options: --add-modules jdk.incubator.foreign --enable-native-access=ALL-UNNAMED
  • Make sure the path to the directory containing the native libraries is contained in the Java system property java.library.path (check also this).
    • For Linux, normally it works fine when installed from a package manager. You can add the libraries' path to the LD_LIBRARY_PATH environment variable.
    • For Mac, if using HomeBrew, you will need to set JAVA_LIBRARY_PATH to /usr/local/lib/.

Installation

Gradle
runtimeOnly "com.github.gotson.nightmonkeys:imageio-{plugin}:{version}"
Gradle (Kotlin DSL)
runtimeOnly("com.github.gotson.nightmonkeys:imageio-{plugin}:{version}")
Maven
<dependency>
    <groupId>com.github.gotson.nightmonkeys</groupId>
    <artifactId>imageio-{plugin}</artifactId>
    <version>{version}</version>
    <scope>runtime</scope>
</dependency>
You might also like...

A template repository for new extensions.

SAP CX Template The sapcxtemplate extension improves ... FEATURE DESCRIPTION COPY-TEXT INTRODUCTION How to activate and use COPY-TEXT ACTIVATION / SET

Dec 15, 2022

React native wrapper for Jitsi Meet SDK Library that rely on the native view (Activity / ViewController)

react-native-jitsi-meet-sdk React native wrapper for Jitsi Meet SDK Library. This Library implements the Jitsi SDK with a native activity on the Andro

May 2, 2022

An awesome native wheel picker component for React Native.

An awesome native wheel picker component for React Native.

⛏️ react-native-picky An awesome native wheel picker component for react-native. Features Supports multiple columns ✅ Supports looping ✅ Native Androi

Dec 4, 2022

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)

OpenAPI Generator Master (5.4.x): 6.0.x (6.0.x): ⭐ ⭐ ⭐ If you would like to contribute, please refer to guidelines and a list of open tasks. ⭐ ⭐ ⭐ ‼️

Dec 30, 2022

AndroidX Media is a collection of libraries for implementing media use cases on Android

AndroidX Media AndroidX Media is a collection of libraries for implementing media use cases on Android, including local playback (via ExoPlayer) and m

Jan 1, 2023

CoreLib - Necessary Libraries required to make the Cores work (API 1.0.13)

CoreLib Necessary Libraries required to make the Cores work (API 1.0.13) CoreLib is a collection of necessary libraries required to make the SurvivalC

Jan 4, 2022

The Download Manager uses a simple yet effective GUI interface built with java’s Swing libraries

The Download Manager uses a simple yet effective GUI interface built with java’s Swing libraries.The use of Swing gives the interface a crisp, modern look and feel. The GUI maintains a list of downloads that are currently being managed.

Jan 2, 2022

The ByteSkript development kit, including resources for third-party libraries that are not contained within the standard runtime.

ByteSkript Development Kit Todo. The development kit is a set of advanced resources available for library creators. These are not available within the

Jan 8, 2022

Java libraries for writing composable microservices

Apollo Status: Archived ⚠️ Apollo is heavily used within Spotify, however, most of its development has recently been done internally leveraging Apollo

Dec 6, 2022
Comments
  • Thank you, and a question

    Thank you, and a question

    First of all, this is a really awesome project: using the new Java 18 Foreign Linker API(instead of JNA) and adding support for JPEG XL to the normal Java ImageIO, meaning using/adopting this lib is really easy to do. You might want to make a post on r/Java to get some more people looking into it.

    To the question, are there any plans/roadblocks/ETA for adding writing xlr files? Looking at komga, it's probably the end goal to be able to also read in png files and send them to the client in jxr to save bandwidth on mobile devices.

    opened by tr7zw 3
  • com.github.gotson.nightmonkeys:imageio-common:jar:0.2.0 missing ?

    com.github.gotson.nightmonkeys:imageio-common:jar:0.2.0 missing ?

    when I add com.github.gotson.nightmonkeys:imageio-jaxl:0.2.0 I get an error about com.github.gotson.nightmonkeys:imageio-common:jar:0.2.0 missing.

    I can't find it in maven central https://search.maven.org/search?q=g:com.github.gotson.nightmonkeys - maybe it was missed ?

    opened by maxandersen 1
  • build(deps): bump actions/setup-java from 2 to 3

    build(deps): bump actions/setup-java from 2 to 3

    Bumps actions/setup-java from 2 to 3.

    Release notes

    Sourced from actions/setup-java's releases.

    v3.0.0

    In scope of this release we changed version of the runtime Node.js for the setup-java action and updated package-lock.json file to v2.

    Breaking Changes

    With the update to Node 16 in #290, all scripts will now be run with Node 16 rather than Node 12.

    v2.5.0

    In scope of this pull request we add support for Microsoft Build of OpenJDK (actions/setup-java#252).

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup-java
        uses: actions/setup-java@v2
        with:
          distribution: microsoft
          java-version: 11
    

    Supported distributions

    Currently, the following distributions are supported:

    Keyword Distribution Official site License
    temurin Eclipse Temurin Link Link
    zulu Zulu OpenJDK Link Link
    adopt or adopt-hotspot Adopt OpenJDK Hotspot Link Link
    adopt-openj9 Adopt OpenJDK OpenJ9 Link Link
    liberica Liberica JDK Link Link
    microsoft Microsoft Build of OpenJDK Link Link

    v2.4.0

    In scope of this pull request we add support for Liberica JDK (actions/setup-java#225).

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup-java
        uses: actions/setup-java@v2
        with:
          distribution: liberica
          java-version: 11
    

    Supported distributions

    Currently, the following distributions are supported:

    Keyword Distribution Official site License
    zulu Zulu OpenJDK Link Link
    adopt or adopt-hotspot Adopt OpenJDK Hotspot Link Link
    adopt-openj9 Adopt OpenJDK OpenJ9 Link Link
    temurin Eclipse Temurin Link Link

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • build(deps): bump actions/upload-artifact from 2 to 3

    build(deps): bump actions/upload-artifact from 2 to 3

    Bumps actions/upload-artifact from 2 to 3.

    Release notes

    Sourced from actions/upload-artifact's releases.

    v3.0.0

    What's Changed

    • Update default runtime to node16 (#293)
    • Update package-lock.json file version to 2 (#302)

    Breaking Changes

    With the update to Node 16, all scripts will now be run with Node 16 rather than Node 12.

    v2.3.1

    Fix for empty fails on Windows failing on upload #281

    v2.3.0 Upload Artifact

    • Optimizations for faster uploads of larger files that are already compressed
    • Significantly improved logging when there are chunked uploads
    • Clarifications in logs around the upload size and prohibited characters that aren't allowed in the artifact name or any uploaded files
    • Various other small bugfixes & optimizations

    v2.2.4

    • Retry on HTTP 500 responses from the service

    v2.2.3

    • Fixes for proxy related issues

    v2.2.2

    • Improved retryability and error handling

    v2.2.1

    • Update used actions/core package to the latest version

    v2.2.0

    • Support for artifact retention

    v2.1.4

    • Add Third Party License Information

    v2.1.3

    • Use updated version of the @action/artifact NPM package

    v2.1.2

    • Increase upload chunk size from 4MB to 8MB
    • Detect case insensitive file uploads

    v2.1.1

    • Fix for certain symlinks not correctly being identified as directories before starting uploads

    v2.1.0

    • Support for uploading artifacts with multiple paths
    • Support for using exclude paths
    • Updates to dependencies

    ... (truncated)

    Commits
    • 3cea537 Merge pull request #327 from actions/robherley/artifact-1.1.0
    • 849aa77 nvm use 12 & npm run release
    • 4d39869 recompile with correct ncc version
    • 2e0d362 bump @​actions/artifact to 1.1.0
    • 09a5d6a Merge pull request #320 from actions/dependabot/npm_and_yarn/ansi-regex-4.1.1
    • 189315d Bump ansi-regex from 4.1.0 to 4.1.1
    • d159c2d Merge pull request #297 from actions/dependabot/npm_and_yarn/ajv-6.12.6
    • c26a7ba Bump ajv from 6.11.0 to 6.12.6
    • 6ed6c72 Merge pull request #303 from actions/dependabot/npm_and_yarn/yargs-parser-13.1.2
    • 2aeee26 Bump yargs-parser from 13.1.1 to 13.1.2
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
Releases(v0.4.0)
  • v0.4.0(Nov 2, 2022)

    Changelog

    🚀 Features

    🔄️ Changes

    • 37bbb28 centralize no op tests in a base abstract reader
    • 2104f94 reorganize gradle build files

    🛠 Build

    • d2ffe7f update JReleaser changelog configuration with new features
    • 88b858a add mandatory JReleaser configuration
    • 867e402 upgrade dependencies
    • 9d19368 upgrade Gradle to 7.5.1
    • bd16d94 migrate set-output to GITHUB_OUTPUT
    • 16f6f67 migrate to macos-12 and ubuntu 22.04
    • 7dd7972 use setup-homebrew action
    • 497675c deps: bump actions/setup-java from 2 to 3
    • cab5e23 deps: bump actions/upload-artifact from 2 to 3
    • d272259 add dependabot
    • bc3e0e6 fix license url for MavenCentral
    • a12efde load single jar instead of jar directory in noLibTest classpath
    • af0d13f update gradle
    • 5ee96b9 add gradle versions plugin
    • f6255b6 update dependencies
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Jun 27, 2022)

    Changelog

    🚀 Features

    • fb8174e (webp) decode animation frames
    • 2d0680a (webp) decode ICC profile from container and apply if needed

    🐛 Fixes

    • efa85c6 (webp) return more standard image types

    🔄️ Changes

    • 1126ea9 (webp) remove outdated TODO
    • b6d328a (webp) don't return raw type in types if no icc profile is set

    🛠 Build

    • 93022ed (common) run testGetNumImages on all images
    • 3c40384 (webp) run icc profile test for all image types
    • 9de0453 (webp) fix no-op test
    • 23a8576 (common) run more tests on the whole test data
    • 9c08ab5 (webp) rerun jextract from demux.h and load webpdemux instead of webp
    • cc25ff4 publish imageio-common to Maven

    📝 Documentation

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Jun 11, 2022)

    Changelog

    🚀 Features

    • b16b77f (webp) initial webp read support

    🐛 Fixes

    • ff4c5d7 (webp) scale output if destination dimensions are different from input dimensions
    • 05577df (webp) support for param source region
    • 5d987d4 (webp) decode to the provided raster instead of returning a BufferedImage
    • 2a4f45a (webp) use TwelveMonkeys imageio-core as a base

    🔄️ Changes

    • 7a715c8 (webp) rename parameters to remove warnings
    • 679b9af (common) use ImageReaderAbstractTest from TwelveMonkeys for test fixtures
    • cdb1a10 pull some logic into a common module

    🛠 Build

    • 38698ca (webp) adjust base tests
    • 6d64d85 (common) write expected region image
    • 513b568 (common) write test images for visual check
    • 0ad0fb5 extract repositories definition
    • 246cc3c properly set os matrix
    • 7c2c123 compute version on push only for main branch

    📝 Documentation

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Apr 11, 2022)

    Changelog

    🚀 Features

    🛠 Build

    • 8f33bef gradle wrapper validation
    • 81c60d8 reorder release steps
    • 6254862 hardcode maven pom description
    • 27b99e8 automatic releases
    • 0d2a76a rearrange gradle build files
    • 5fb9976 add nexus publishing plugin
    • 858b272 use lists instead of iterators in JpegXlImageReaderTest.java
    • 0ad4c2e setup jar for maven snapshot publishing
    • 23b3be6 move version to gradle.properties
    • 30864d4 automatic tests
    • 97e665a unset java.library.path for noLibTest

    📝 Documentation

    • ad1a44b fix maven snapshot badge in README.md
    • d5bfbe5 fix GAV coordinates in README.md
    • 66cd36b add README.md and DEVELOPING.md
    Source code(tar.gz)
    Source code(zip)
Owner
Gauthier
Gauthier
DiscordRPC library that doesn't require any extra native libraries

DiscordRPC library using java 16 sockets on unix-like systems This is both good and bad, it's good because the only native library it needs is the sta

Nep Nep 4 Oct 8, 2022
Sceneform React Native AR Component using ARCore and Google Filament as 3D engine. This the Sceneform Maintained Component for React Native

Discord Server Join us on Discord if you need a hand or just want to talk about Sceneform and AR. Features Remote and local assets Augmented Faces Clo

SceneView Open Community 42 Dec 17, 2022
With react-native-update-in-app library you can easily implement in-app updates in your React Native app using CDN or any other file server

React Native In-App update With react-native-update-in-app library you can easily implement in-app updates in your React Native app using CDN or any o

Nepein Andrey 7 Dec 21, 2022
A small mod to improve support for architectures and libraries officially unsupported by Minecraft. Mainly targeting Apple Macs using arm processors.

fabric-loom-native-support A small mod to improve support for architectures and libraries officially unsupported by Minecraft. Mainly targeting Apple

FabricMC 5 Oct 17, 2022
Event promoted by DevSuperior to improve the best practices of Spring with Java and has React JS as an additional.

Semana-Spring-React (sds3.0) Introduction SDS3 is an event promoted by DevSuperior which aims to help students and programming professionals to enter

Gilson Vieira de Souza 5 Oct 25, 2021
First experiments to try to render the Doom WAD maps using only standard libraries. Test 004 - https://youtu.be/-6mePgg7gXE

JavaDoomWADMapRendererTests Test 001 (07/set/2022) - https://youtu.be/MpY0PICdcwM First experiments to try to render the Doom WAD maps using only stan

Leo 6 Oct 17, 2022
Log4j-RCE (CVE-2021-44228) Proof of Concept with additional information

Log4J-RCE-Proof-Of-Concept (CVE-2021-44228) This is a proof of concept of the log4j rce. Here are some links for the CVE-2021-44228: https://www.lunas

Johannes Jäger 181 Dec 2, 2022
Spring Data Redis extensions for better search, documents models, and more

Object Mapping (and more) for Redis! Redis OM Spring extends Spring Data Redis to take full advantage of the power of Redis. Project Stage Snapshot Is

Redis 303 Dec 29, 2022
A library for common extensions for Truth.

truth-extensions A library for common extensions for Truth. Usage Repository To depend on a release, you need only depend on the official Maven centra

Mardrömmar 2 Jan 24, 2022
An intelliJ plugin providing a UI layer for git-flow, which in itself is a collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model.

Git Flow Integration Plus for Intellij An intelliJ plugin providing a UI layer for git-flow, which in itself is a collection of Git extensions to prov

RubinCarter 35 Nov 8, 2022