渲染webp图像

时间:2014-06-04 08:01:44

标签: image-processing playframework-2.0 webp

我有一个代表PNG的byteArray,但我想将其转换为webP。我有以下代码。我在我的代码中使用了com.sksamuel.scrimage.Image并加载了系统库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")
}

如果我请求png图像,一切正常,但在请求webP图像时,我得到以下内容。

#  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

我尝试了步幅输入image.width,image.width的其他值四舍五入为4的倍数,image.width四舍五入为3的倍数。在这种情况下,它不会崩溃,但图像非常嘈杂,看起来没有像原版一样。

1 个答案:

答案 0 :(得分:0)

我将项目切换为使用webp-imageio库,并且能够以下列方式实现它。

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")
}