fix(thumbnails): fix wrong color in thumbnails

changed thumbnails library

closes #77
This commit is contained in:
Gauthier Roebroeck 2020-01-18 07:54:09 +08:00
parent b42eadf182
commit 1d5500d560
3 changed files with 11 additions and 20 deletions

View file

@ -71,7 +71,7 @@ dependencies {
implementation("org.apache.pdfbox:pdfbox:2.0.17") implementation("org.apache.pdfbox:pdfbox:2.0.17")
implementation("net.grey-panther:natural-comparator:1.1") implementation("net.grey-panther:natural-comparator:1.1")
implementation("net.coobird:thumbnailator:0.4.8") implementation("org.imgscalr:imgscalr-lib:4.2")
implementation("com.twelvemonkeys.imageio:imageio-jpeg:3.4.2") implementation("com.twelvemonkeys.imageio:imageio-jpeg:3.4.2")
implementation("com.twelvemonkeys.imageio:imageio-tiff:3.4.2") implementation("com.twelvemonkeys.imageio:imageio-tiff:3.4.2")
implementation(files("$projectDir/libs/webp-imageio-decoder-plugin-0.2.jar")) implementation(files("$projectDir/libs/webp-imageio-decoder-plugin-0.2.jar"))

View file

@ -1,18 +1,17 @@
package org.gotson.komga.domain.service package org.gotson.komga.domain.service
import mu.KotlinLogging import mu.KotlinLogging
import net.coobird.thumbnailator.Thumbnails
import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.Book
import org.gotson.komga.domain.model.BookPage import org.gotson.komga.domain.model.BookPage
import org.gotson.komga.domain.model.Media import org.gotson.komga.domain.model.Media
import org.gotson.komga.domain.model.MediaNotReadyException import org.gotson.komga.domain.model.MediaNotReadyException
import org.gotson.komga.infrastructure.image.ImageConverter
import org.gotson.komga.infrastructure.mediacontainer.ContentDetector import org.gotson.komga.infrastructure.mediacontainer.ContentDetector
import org.gotson.komga.infrastructure.mediacontainer.PdfExtractor import org.gotson.komga.infrastructure.mediacontainer.PdfExtractor
import org.gotson.komga.infrastructure.mediacontainer.RarExtractor import org.gotson.komga.infrastructure.mediacontainer.RarExtractor
import org.gotson.komga.infrastructure.mediacontainer.ZipExtractor import org.gotson.komga.infrastructure.mediacontainer.ZipExtractor
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
import java.io.ByteArrayOutputStream
import java.util.* import java.util.*
private val logger = KotlinLogging.logger {} private val logger = KotlinLogging.logger {}
@ -22,7 +21,8 @@ class BookAnalyzer(
private val contentDetector: ContentDetector, private val contentDetector: ContentDetector,
private val zipExtractor: ZipExtractor, private val zipExtractor: ZipExtractor,
private val rarExtractor: RarExtractor, private val rarExtractor: RarExtractor,
private val pdfExtractor: PdfExtractor private val pdfExtractor: PdfExtractor,
private val imageConverter: ImageConverter
) { ) {
val supportedMediaTypes = mapOf( val supportedMediaTypes = mapOf(
@ -76,7 +76,7 @@ class BookAnalyzer(
logger.info { "Book has ${pages.size} pages" } logger.info { "Book has ${pages.size} pages" }
logger.info { "Trying to generate cover for book: $book" } logger.info { "Trying to generate cover for book: $book" }
val thumbnail = generateThumbnail(book, mediaType, pages.first().fileName) val thumbnail = generateThumbnail(book)
return Media(mediaType = mediaType, status = Media.Status.READY, pages = pages, thumbnail = thumbnail, comment = entriesErrorSummary) return Media(mediaType = mediaType, status = Media.Status.READY, pages = pages, thumbnail = thumbnail, comment = entriesErrorSummary)
} }
@ -90,7 +90,7 @@ class BookAnalyzer(
throw MediaNotReadyException() throw MediaNotReadyException()
} }
val thumbnail = generateThumbnail(book, book.media.mediaType!!, book.media.pages.first().fileName) val thumbnail = generateThumbnail(book)
return Media( return Media(
mediaType = book.media.mediaType, mediaType = book.media.mediaType,
@ -100,16 +100,10 @@ class BookAnalyzer(
) )
} }
private fun generateThumbnail(book: Book, mediaType: String, entry: String): ByteArray? = private fun generateThumbnail(book: Book): ByteArray? =
try { try {
ByteArrayOutputStream().use { getPageContent(book, 1).let { cover ->
supportedMediaTypes.getValue(mediaType).getEntryStream(book.path(), entry).let { cover -> imageConverter.resizeImage(cover, thumbnailFormat, thumbnailSize)
Thumbnails.of(cover.inputStream())
.size(thumbnailSize, thumbnailSize)
.outputFormat(thumbnailFormat)
.toOutputStream(it)
it.toByteArray()
}
} }
} catch (ex: Exception) { } catch (ex: Exception) {
logger.warn(ex) { "Could not generate thumbnail for book: $book" } logger.warn(ex) { "Could not generate thumbnail for book: $book" }

View file

@ -1,7 +1,7 @@
package org.gotson.komga.infrastructure.image package org.gotson.komga.infrastructure.image
import mu.KotlinLogging import mu.KotlinLogging
import net.coobird.thumbnailator.Thumbnails import org.imgscalr.Scalr
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import javax.imageio.ImageIO import javax.imageio.ImageIO
@ -32,10 +32,7 @@ class ImageConverter {
fun resizeImage(imageBytes: ByteArray, format: String, size: Int): ByteArray = fun resizeImage(imageBytes: ByteArray, format: String, size: Int): ByteArray =
ByteArrayOutputStream().use { ByteArrayOutputStream().use {
Thumbnails.of(imageBytes.inputStream()) ImageIO.write(Scalr.resize(ImageIO.read(imageBytes.inputStream()), Scalr.Method.AUTOMATIC, size), format, it)
.size(size, size)
.outputFormat(format)
.toOutputStream(it)
it.toByteArray() it.toByteArray()
} }
} }