Skip to content

Commit

Permalink
fix: native webp library
Browse files Browse the repository at this point in the history
native webp library will be used over java implementation if possible

closes gotson#279
  • Loading branch information
gotson committed Oct 25, 2020
1 parent 11df1e0 commit 15caea3
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
1 change: 1 addition & 0 deletions komga/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ dependencies {
runtimeOnly("com.twelvemonkeys.imageio:imageio-jpeg:3.6")
runtimeOnly("com.twelvemonkeys.imageio:imageio-tiff:3.6")
runtimeOnly(files("$projectDir/libs/webp-imageio-decoder-plugin-0.2.jar"))
implementation("org.gotson:webp-imageio:0.2.0")
// support for jpeg2000
runtimeOnly("com.github.jai-imageio:jai-imageio-jpeg2000:1.3.0")
runtimeOnly("org.apache.pdfbox:jbig2-imageio:3.0.3")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,42 @@
package org.gotson.komga.infrastructure.image

import com.luciad.imageio.webp.WebP
import mu.KotlinLogging
import net.coobird.thumbnailator.Thumbnails
import org.springframework.stereotype.Service
import java.awt.Color
import java.awt.image.BufferedImage
import java.io.ByteArrayOutputStream
import javax.imageio.ImageIO
import javax.imageio.spi.IIORegistry
import javax.imageio.spi.ImageReaderSpi


private val logger = KotlinLogging.logger {}

@Service
class ImageConverter {

val supportedReadFormats = ImageIO.getReaderFormatNames().toList()
val supportedReadMediaTypes = ImageIO.getReaderMIMETypes().toList()
val supportedWriteFormats = ImageIO.getWriterFormatNames().toList()
val supportedWriteMediaTypes = ImageIO.getWriterMIMETypes().toList()
val supportedReadFormats by lazy { ImageIO.getReaderFormatNames().toList() }
val supportedReadMediaTypes by lazy { ImageIO.getReaderMIMETypes().toList() }
val supportedWriteFormats by lazy { ImageIO.getWriterFormatNames().toList() }
val supportedWriteMediaTypes by lazy { ImageIO.getWriterMIMETypes().toList() }

init {
val registry = IIORegistry.getDefaultInstance()
val nativeWebp = registry.getServiceProviderByClass(Class.forName("com.luciad.imageio.webp.WebPImageReaderSpi")) as ImageReaderSpi?
val javaWebp = registry.getServiceProviderByClass(Class.forName("net.sf.javavp8decoder.imageio.WebPImageReaderSpi")) as ImageReaderSpi?

if (nativeWebp != null) {
if (!WebP.loadNativeLibrary()) {
logger.warn { "Could not load native WebP library" }
registry.deregisterServiceProvider(nativeWebp)
} else if (javaWebp != null) {
logger.info { "Using native WebP library" }
registry.setOrdering(ImageReaderSpi::class.java, nativeWebp, javaWebp)
}
}

logger.info { "Supported read formats: $supportedReadFormats" }
logger.info { "Supported read mediaTypes: $supportedReadMediaTypes" }
logger.info { "Supported write formats: $supportedWriteFormats" }
Expand Down

0 comments on commit 15caea3

Please sign in to comment.