문제

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에 대한 다른 값을 시도했다 .Width, 4, 이미지의 배수로 둥글게 둥글게된다.이 경우 3. 배수로 둥글게 둥글게됩니다.이 경우에는 충돌하지 않지만 이미지는 매우 시끄 럽지 않고 외모가 있습니다.원래와 같은 것은 없습니다.

도움이 되었습니까?

해결책

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top