2011-12-29 8 views
3

현재 iOS 소프트웨어에서 Google의 WebP 이미지 형식을 사용할 수 있는지 조사 중입니다.iOS의 WebP 이미지 형식

Google의 C 라이브러리를 사용하여 필요에 따라 WebP를 RGBA8888로 디코딩하는 것이 어렵지 않습니다.

그러나 API와 성능 측면에서 UIImage에 필적하는 구현을 만들고 싶습니다.

Q1. iOS에서 이미지 디코더를 개발하여 원시 imageWithData 및 기타 API가 새로운 형식을 읽을 수 있습니까?

2. 없다면 UIImageView (및 다른 프레임 워크 제공 컨트롤)는 UIImage를 그릴 때 어떤 API를 사용합니까? 공개입니까 (예 : drawInRect/drawAtPoint) 또는 내부입니까? UIImage에서 상속 받고 (+ imageWithContentsOfFile, + imageWithData, + imageNamed, - drawInRect, -drawAtPoint와 같은) 몇 가지 메서드를 재정의하고 WPImage 객체가 SDK 제공 API로 제대로 작동하게 할 수 있습니까?

3. 가상의 WPImage 클래스의 모든 인스턴스가 UIApplicationDidReceiveMemoryWarningNotification (RAM에 훨씬 더 작은 원본 WebP 데이터를 남겨둔 RGBA 이미지 버퍼를 플러시하기 위해)에 가입하면 성능이 많이 저하되지 않습니까? 우리가 개발하고있는 소프트웨어는 수백 개의 서로 다른 이미지를 쉽게 RAM에 저장할 수 있습니다.

미리 감사드립니다.

답변

1
+0

당신은 특히 "이는 구글의 C 라이브러리 사용하여 필요에 따라 RGBA8888에 WebP 형식을 디코딩하는 데 어렵지 않다"을, 질문을 읽나요? 물론 해독하는 것은 쉽지 않습니다. 제 질문은 자체 디코딩 자체가 아니라 UIKit에 WebP 디코더를 통합하는 것에 관한 것입니다. – Soonts

+0

방금 ​​관련이있는 것 발견 - https://github.com/seanooi/iOS-WebP – computingfreak

0

내가 작성한 또 다른 예는 Carson McDonald가 시작했지만 재사용 할 수있는 방식으로 작업 한 것입니다. 기본적으로 당신이 당신의 프로젝트에 WebP.framework를 추가 (내 예에 포함되거나 생성-수 카슨은 자신의 웹 사이트에있는 지침을 사용하여) 다음은 다음과 같이 할 수 있습니다 : 당신이 먹고 싶어하면

#import "UIImage+WebP.h" 
... 

self.imageView.image = [UIImage imageFromWebP:@"path/to/image.webp"]; 
// or 
[self.button setImage:[UIImage imageFromWebP:@"path/to/image.webp" 
     forState:UIControlStateNormal]]; 

을 제 예제를 보시려면 여기로 가십시오 : https://github.com/nyteshade/iOSWebPWithAlphaExample

+0

웹 페이지가 로컬 인 경우 어떻게해야합니까? – Marin

0

먼저, WebP 픽셀을 버퍼로 디코딩하십시오. 그런 다음 CGDataProviderCreateWithData()를 호출하여 CoreGraphics에 대한 "데이터 공급자"를 만든 다음 CGImageCreate()를 호출하고 공급자와 필요한 모든 인수를 전달해야합니다. 마지막으로, UIImage 인스턴스를 생성하기 위해 UIImage imageWithCGImage : imageRef를 호출하십시오.

1

WebP에 대한 전체 (디코딩/인코딩) UIImage 래퍼를 만들었습니다.

https://github.com/shmidt/WebP-UIImage

+0

UIImage에서 WebP를 얻으려는 시도를 해봤지만 iOS 7을 실행하는 iPhone 4S에서만 멈 춥니 다. CPU가 90 % 이상 올라가서 그냥 앉아 있습니다. 동일한 결과를 가진 WebP 라이브러리를 다시 빌드했습니다. WebPEncodeRGBA 호출 중에 응답하지 않습니다. 성공적으로 UIImage에서 WebP를 인코딩 할 수 있었습니까? – pickwick

+0

@pickwick 장치에서 시도하지 않았지만 업데이트 된 프레임 워크로 버전을 시험해 볼 수 있습니다. https://github.com/seanooi/iOS-WebP – Shmidt

+1

프레임 워크를 업데이트했습니다. 문제는 내 인내심으로 드러났습니다. 큰 이미지를 인코딩하는 데 너무 느리고 프로세서 집약적 인 방식입니다.1200 x 1200과 같은 이미지 크기를 조정하면 약 10 초 후에 데이터를 얻을 수 있습니다. 파일 크기가 JPEG보다 작지만 처리 시간이 너무 길어서 내 응용 프로그램에서 유용하지 않습니다. 감사합니다 – pickwick