Rendu des images Web
-
21-12-2019 - |
Question
J'ai un byearray qui représente un PNG, mais je veux convertir cela en WebP.J'ai le code suivant.J'utilise com.sksamuel.scrimage.Image dans mon code et chargez la bibliothèque système 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")
}
Si je demande l'image PNG, tout fonctionne bien, mais lorsque vous demandez à l'image WebP, je reçois ce qui suit.
# 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
J'ai essayé d'autres valeurs pour l'image d'entrée de la foulée.Width, image.width arrondi à des multiples de 4, image.Width autour de multiples de 3. Dans ce cas, il ne plante pas, mais l'image est très bruyante et l'imagerien comme l'original.
La solution
J'ai commuté mon projet pour utiliser le bibliothèque WebP-imageIO et a été capable de la mettre en œuvre dansla manière suivante.
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")
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow