Не удается загрузить изображение с URL-адресом пути, возвращенным ALAssets - PullRequest
2 голосов
/ 18 января 2012

Я пишу изображение в iPad, используя ALAssets.Когда он заканчивается, я пытаюсь создать UIImage с возвращенным 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 и, наконец, отправить его в веб-службу.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/

Помогите пожалуйста, я застрял с этим: - (

Ответы [ 2 ]

0 голосов
/ 05 октября 2012

Это то, что я сделал для своего дела.

    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);

Но это просто конвертирует изображение, оно не сохраняет его ни в каком файле ... Не уверен, что это должен быть ответ на оригинальный вопрос.

0 голосов
/ 25 января 2012

Если у вас уже есть 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...