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.

Était-ce utile?

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
scroll top