2014-06-04 10 views
0

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 4의 배수로 반올림, 스트라이드 입력 image.width 대해 다른 값을 시도 image.width는 충돌하지 않는이 경우 3의 배수로 반올림하지만 영상은 매우 시끄럽고 원본처럼 보이지 않습니다.

답변

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