2011-12-29 118 views
3

我目前正在研究在我們的iOS軟件中使用Google WebP圖像格式的可能性。iOS上的WebP圖像格式

我發現使用谷歌的C庫,根據需要將WebP解碼爲RGBA8888並不困難。

但是,我想在API和性能方面創建一個與UIImage相媲美的實現。

Q1。是否有可能在iOS開發一個圖像解碼器,以便本機imageWithData和其他API將讀取新格式? Q2302。如果不是,UIImageView(和其他框架提供的控件)使用什麼API來繪製UIImage?它是公共的(例如drawInRect/drawAtPoint)還是內部的?我可以從UIImage繼承,重寫一些方法(比如+ imageWithContentsOfFile,+ imageWithData,+ imageNamed, - drawInRect,-drawAtPoint),並讓我的WPImage對象在使用SDK提供的API時表現良好?

Q3。如果我假設的WPImage類的每個實例都將訂閱UIApplicationDidReceiveMemoryWarningNotification(以刷新RGBA圖像緩衝區,而將更小的原始WebP數據留在RAM中),是不是會嚴重影響性能?我們正在開發的軟件可能很容易在RAM中存儲數百個不同的圖像。

在此先感謝!

回答

1
+0

你讀的問題,特別是「這不是很難,因爲使用谷歌的C語言庫需要對WebP的解碼成RGBA8888」? 當然,解碼並不重要。 我的問題是關於將WebP解碼器集成到UIKit中,而不是解碼本身。 – Soonts 2012-07-10 02:57:34

+0

剛剛發現了一些似乎相關的東西 - https://github.com/seanooi/iOS-WebP – computingfreak 2018-02-28 02:57:47

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

如果webp是本地的呢? – Marin 2017-01-23 23:05:16

0

首先,將WebP像素解碼爲緩衝區。然後您需要調用CGDataProviderCreateWithData()爲CoreGraphics創建一個「數據提供者」,然後調用CGImageCreate()並傳遞提供者和所有必需的參數。最後,調用UIImage imageWithCGImage:imageRef以創建一個UIImage實例。

1

我爲WebP製作了完整的(解碼/編碼)UIImage包裝。

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

+0

我已經試過實現這個從UIImage獲取WebP,它只是掛在運行iOS 7的iPhone 4S上:CPU超過90%,只是坐在那裏。我鏈接到重建WebP庫,結果相同。它在WebPEncodeRGBA調用期間掛起。你能否成功地從UIImage編碼WebP? – pickwick 2014-01-22 19:00:46

+0

@pickwick我沒有在設備上試過,但是您可以嘗試使用更新框架的版本:https://github.com/seanooi/iOS-WebP – Shmidt 2014-01-22 20:15:29

+1

我更新了框架。問題原來是我的耐心:它只是太慢而且處理器密集型以編碼大圖像。如果我將圖像大小調整爲1200 x 1200,我可以在大約10秒後獲取數據。文件大小比JPEG小,但處理時間太長,以至於在我的應用程序中非常有用。謝謝 – pickwick 2014-01-22 20:38:10