Rendering immagini webp.
-
21-12-2019 - |
Domanda
Ho un bytearray che rappresenta un png, ma voglio convertire questo in webp.Ho il codice seguente.Faccio uso di com.sksamuel.scrimage.image nel mio codice e caricare la libreria di sistema webp_jni.
val image = Image(content) //content of PNG of type Array[Byte]
extension match {
case "webp" => Ok(
libwebp.WebPEncodeRGB(
image.write,
image.width,
image.height,
image.width * 3,
80F)
).as("image/webp")
case _ => Ok(image.write).as("image/png")
}
.
Se richiedo l'immagine PNG, tutto funziona bene, ma quando si richiede l'immagine Webp, ottengo quanto segue.
# SIGSEGV (0xb) at pc=0x00007fc008287377, pid=14883, tid=140461610465024
#
# JRE version: Java(TM) SE Runtime Environment (8.0_05-b13) (build 1.8.0_05-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.5-b02 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libwebp.so.5+0x33377] WebPPictureAlloc+0x407
.
Ho provato altri valori per l'immagine di input del passo.Width, Image.Width arrotondato a multipli di 4, image.width arrotondato a multipli di 3. In questo caso non si blocca, ma l'immagine è molto rumorosa e guardaNiente come l'originale.
Soluzione
Ho cambiato il mio progetto per utilizzare webp-imageook libreria ed è stato in grado di implementarloil seguente modo.
val image = Image(content) //content of PNG of type Array[Byte]
extension match {
case "webp" => {
val out = new ByteArrayOutputStream()
ImageIO.write(resizedImage.awt, "webp", out)
Ok(out.toByteArray).as("image/webp")
case _ => Ok(image.write).as("image/png")
}
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow