2014-01-31 78 views
0

我需要讀取圖像的屬性而不加載或下載它。實際上,我已經實現了一個使用CGImageSourceCreateWithUrl來實現這個功能的簡單方法。 我的問題是它總是返回錯誤,因爲看起來imageSource是空的。那麼我能做些什麼來解決它? 在NSURL對象中,我傳遞的URL如下: 「http://www.example.com/wp-content/uploads/image.jpg」,還包含ALAssets庫Id,用於檢索手機內部的圖像,如「assets-library://asset/asset.JPG?id = E5F41458-962D-47DD-B5EF- E606E2A8AC7A & ext = JPG「。 這是我的方法:CGImageSourceCreateWithURL總是返回NULL

-(NSString *) getPhotoInfo:(NSString *)paths{ 
    NSString *xmlList = @「test」; 

    NSURL * imageFileURL = [NSURL fileURLWithPath:paths]; 
    NSLog(@"imageFileURL %@", imageFileURL); 
    CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)(imageFileURL), NULL); 
    if (imageSource == NULL) { 
    // Error loading image 
    NSLog(@"Error loading image"); 
    } 
    CGFloat width = 0.0f, height = 0.0f; 
    CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); 
    NSLog(@"image source %@", imageSource); 

    return xmlList; 
} 

我已經看到了這個職位,嘗試修復它,但似乎沒有工作:

在我的項目ARC已啓用。

感謝

回答

5

如果您傳遞字符串「http://www.example.com/wp-content/uploads/image.jpg」到-fileURLWithPath:它會返回nil,因爲該字符串肯定不是一個文件的路徑,這是一個URL字符串

思考的 - fileURLWithPath:正如你預先輸入的字符串是「file:// localhost /」...所以你最終會看到一個類似於「file:// localhost/http://www.example.com/wp-content/uploads/image.jpg」的URL。這不好。

如果要傳遞整個URL字符串,而不僅僅是文件系統路徑字符串,則需要調用[NSURL URLWithString:paths]。

+0

由於現在更清晰如果我使用像「http://example.com/name.jpg」這樣的url,但是在使用類似「assets-library://asset/asset.JPG?id = E5F41458- 962D-47DD-B5EF-E606E2A8AC7A&ext = JPG「?它是使用ALAsset庫建立的,在這種情況下,它總是返回空值 – Hieicker

+0

[NSURL URLWithString:]應該與」assets-library://asset/asset.JPG?id = E5F41458-962D-47DD-B5EF-E606E2A8AC7A&ext = JP G「,我會想。它返回零,你是說? –

+0

謝謝!事實上,它並不返回零,但這種錯誤「ImageIO:CGImageSourceCreateWithURL CFURLCreateDataAndPropertiesFromResource失敗,錯誤代碼爲-11。」它還返回錯誤「Error loading image」,顯然在返回後(總是在日誌中)imageSource(null) – Hieicker

1

與「資產庫工作:?//asset/asset.JPG ID ..........,試試這個代碼的解釋

-(UIImage*)resizeImageToMaxSize:(CGFloat)max anImage:(UIImage*)anImage 
{ 

    NSData * imgData = UIImageJPEGRepresentation(anImage, 1); 
CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)imgData, NULL); 
if (!imageSource) 
    return nil; 

CFDictionaryRef options = (CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: 
              (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform, 
              (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageIfAbsent, 
              (id)[NSNumber numberWithFloat:max], (id)kCGImageSourceThumbnailMaxPixelSize, 
              nil]; 
CGImageRef imgRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options); 

UIImage* scaled = [UIImage imageWithCGImage:imgRef]; 
    //these lines might be skipped for ARC enabled 
CGImageRelease(imgRef); 
CFRelease(imageSource); 

return scaled; }