遠(yuǎn)端圖片尺寸獲取

背景

傳統(tǒng)獲取遠(yuǎn)端圖片尺寸,需要下載遠(yuǎn)端圖片到本地,然后再讀取圖片Size。

存在問題

  1. 假如圖片很大,消耗時長較長。
  2. 僅僅想獲取Size,而不使用此圖,下載全圖純屬浪費。

問題分析

如果能不下載圖片,就能讀取Size,那么就完美了。

JPG/PNG/GIF

傳統(tǒng)的JPG/PNG/GIF,尺寸信息是寫在圖片Data頭部的EXIF,下載完此頭部,即可得到圖片尺寸信息,而無需下載整張圖片。

參考:
JPG信息格式
PNG信息

如何讀取文件頭部信息

答案就是ImageIO,示例代碼如下:

CGImageSourceRef sourceRef = CGImageSourceCreateIncremental(NULL);
// 傳入圖片頭部
CGImageSourceUpdateData(sourceRef, (__bridge CFDataRef)data, NO);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(sourceRef, 0, NULL);
CGSize size = CGSizeMake(CGImageGetWidth(imageRef), CGImageGetHeight(imageRef));
// Print圖片尺寸
CGImageRelease(imageRef);
CFRelease(sourceRef);

完整代碼

下載圖片頭部,解析圖片信息。
代碼下載:https://github.com/V5zhou/GDRemoteImageSize

效果對比

隨便找了幾張圖對比,由于網(wǎng)速波動不太可靠,大概優(yōu)化10倍左右。
GIF對比:


GIF

JPG對比:


JPG

關(guān)于緩存

NSURLSessionConfiguration.defaultSessionConfiguration默認(rèn)會緩存數(shù)據(jù),下次會走本地緩存,加速識別。
當(dāng)然,你也可以補(bǔ)充緩存方案,把url作為key,Size為Value,手動持久化緩存。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容