2012-01-18 39 views
2

我正在使用ALAssets在iPad中編寫圖像。完成後,我嘗試使用返回的URL創建UIImage,但不會加載。這是代碼:無法使用由ALAssets返回的路徑URL加載圖像

LAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    [library writeImageToSavedPhotosAlbum:[anImage CGImage] orientation:(ALAssetOrientation)[anImage imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){ 
     if (!error) { 
      CGImageSourceRef src = CGImageSourceCreateWithURL((CFURLRef) [NSURL fileURLWithPath:[assetURL absoluteString]], NULL); 

我的目的是將圖像保存到該設備,然後使用ImageIO的將其轉換爲另一種格式,並最終將其發送到Web服務。 CGImageSourceRef爲null,我也用標準UIImage嘗試了相同的結果。

我在做什麼錯在這裏?

編輯:問題是當創建CFURLRef。 如果我做

CGImageSourceCreateWithURL((CFURLRef) assetURL, NULL); 

我得到這個錯誤

的ImageIO:CGImageSourceCreateWithURL CFURLCreateDataAndPropertiesFromResource失敗,錯誤代碼-11。

但是,如果我嘗試將URL轉換與

[NSURL fileURLWithPath:[assetURL absoluteString]] 

路徑更改爲

assets-library:/asset/asset.JPG%3Fid=57BBBA99-E7BF-4DB7-839E-F915005E6DFA&ext=JPG -- file://localhost/ 

我無法找到如何正確地創建該方法所需的CFURLRef。我試着打印所有我能想到的轉換,這是結果

[assetURL relativePath] 
[assetURL relativeString] 
[assetURL absoluteURL] 
[assetURL absoluteString] 
/asset.JPG , 
assets-library://asset/asset.JPG?id=57BBBA99-E7BF-4DB7-839E-F915005E6DFA&ext=JPG 
assets-library://asset/asset.JPG?id=57BBBA99-E7BF-4DB7-839E-F915005E6DFA&ext=JPG 
assets-library://asset/asset.JPG?id=57BBBA99-E7BF-4DB7-839E-F915005E6DFA&ext=JPG 

[NSURL fileURLWithPath:[assetURL relativePath]] 
[NSURL fileURLWithPath:[assetURL relativeString]] 
[NSURL fileURLWithPath:[assetURL absoluteString]] 
file://localhost/asset.JPG 
assets-library:/asset/asset.JPG%3Fid=57BBBA99-E7BF-4DB7-839E-F915005E6DFA&ext=JPG -- file://localhost/ 
assets-library:/asset/asset.JPG%3Fid=57BBBA99-E7BF-4DB7-839E-F915005E6DFA&ext=JPG -- file://localhost/ 

請幫助,我堅持這種:-(

回答

0

這是我做我的情況。

UIImage* anImage; //this is the original image  
    NSData * imgData = UIImageJPEGRepresentation(anImage, 0.7); 
    CGImageSourceRef src = CGImageSourceCreateWithData((CFDataRef) imgData, NULL); 

    NSMutableData *data = [NSMutableData data]; 
    CFStringRef imageType = CFSTR("com.microsoft.bmp"); 
    CGImageDestinationRef myImageDest = CGImageDestinationCreateWithData((CFMutableDataRef) data, imageType, 1, nil); 

    //Convert! 
    CGImageDestinationAddImageFromSource(myImageDest, src, 0, myOptions); 
    CGImageDestinationFinalize(myImageDest); 
    //Freeing things 
    CFRelease(myImageDest); 
    CFRelease(src); 

但這只是轉換圖像,它不會將其存儲在任何文件中......不確定這應該是對原始問題的答案。

-1

如果你已經有一個ALAsset和你的目標是一個CGImageRef你可以做這樣的事情。

ALAssetRepresentation* rep = [asset defaultRepresentation]; 

NSDictionary* options = [[NSDictionary alloc] initWithObjectsAndKeys: 
         (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform, 
         (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageAlways, 
         (id)[NSNumber numberWithDouble:400], (id)kCGImageSourceThumbnailMaxPixelSize, 
         nil]; 

CGImageRef image = [rep CGImageWithOptions:options]; 
+0

非常感謝,效果很好! – momo 2012-01-25 08:26:31

+1

對不起,但這不起作用。它創建一個圖像,是的,但傳入的最大尺寸不起作用 - 它只是返回一個非常大的圖像。 – akaru 2012-09-05 23:02:56

+0

你說得對,下面是我在特定情況下所做的,希望它能幫助某人 – momo 2012-10-05 07:45:20

相關問題