mirror of
https://github.com/gotson/komga.git
synced 2025-12-22 00:13:30 +01:00
fix(thumbnails): fix wrong color in thumbnails
changed thumbnails library closes #77
This commit is contained in:
parent
b42eadf182
commit
1d5500d560
3 changed files with 11 additions and 20 deletions
|
|
@ -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"))
|
||||||
|
|
|
||||||
|
|
@ -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" }
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue