簡體   English   中英

如何在不下載整個圖像的情況下獲取圖像的尺寸?

[英]How can I get the dimensions of an image without downloading the entire image?

到目前為止我有這個方法:

+ (CGSize) imageDimensions: (NSString *)url {

NSURL *imageFileURL = [NSURL URLWithString: url];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageFileURL, NULL);
if (imageSource == NULL) {
    return CGSizeMake(0, 0);
}

CGFloat width = 0.0f, height = 0.0f;
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
if (imageProperties != NULL) {
    CFNumberRef widthNum  = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
    if (widthNum != NULL) {
        CFNumberGetValue(widthNum, kCFNumberFloatType, &width);
    }

    CFNumberRef heightNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
    if (heightNum != NULL) {
        CFNumberGetValue(heightNum, kCFNumberFloatType, &height);
    }

    CFRelease(imageProperties);
}

return CGSizeMake(width, height);

}

但是我正在做一些測試,似乎這個方法的運行速度和我下載整個圖像並檢查size屬性一樣快。 我曾經認為這種方法只需下載圖像的元數據或標題並檢查其中的分辨率即可。 我錯了嗎? 有沒有一種快速的方法可以在不抓取圖像的情況下盡快從物鏡C中的互聯網圖像中獲取圖像尺寸?

大多數圖形格式的尺寸都存儲在標題中。 如果您將自己限制為格式的子集(例如,PNG / JPG / GIF),並實現自己的頭解析代碼,那么它是可能的。 但是,您將獨立運行 - 核心圖形圖像API不適用於部分文件。

要從'Net請求文件的一部分,您可以使用Range標頭。 但是,有些Web服務器可能不尊重它。 請求支持格式的標頭大小中最大的字節數。 此外,您可能希望驗證標頭中的魔術字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM