2012-10-02 9 views
9

Próbuję zapisać UIImage do albumu ze zdjęciami. Próbowałem metod severl ostatni:Zapisz UIImage do albumu ze zdjęciem writeImageToSavedPhotosAlbum

-(IBAction)captureLocalImage:(id)sender{ 

[photoCaptureButton setEnabled:NO]; 

// Save to assets library 
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

[library writeImageToSavedPhotosAlbum: imageView.image.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error2) 
{ 
    //    report_memory(@"After writing to library"); 
    if (error2) { 
     NSLog(@"ERROR: the image failed to be written"); 
    } 
    else { 
     NSLog(@"PHOTO SAVED - assetURL: %@", assetURL); 
    } 

    runOnMainQueueWithoutDeadlocking(^{ 
     //     report_memory(@"Operation completed"); 
     [photoCaptureButton setEnabled:YES]; 
    }); 
}]; 

} 

imageView to UIImageView, który zawiera obraz, który chcę zapisać. W dzienniku mam "ZDJĘCIE ZAPISANE - assetURL: (null)", a zdjęcie nie zapisuje w bibliotece.

Co robię źle?

+0

Mam ten sam problem. Nie znalazłem rozwiązania jeszcze .. – drhr

+0

Sprawdź poniżej swoją odpowiedź. Rozwiązałem moje, może to też ci pomoże. – Idan

Odpowiedz

2

Sprawdź tę sample .. który wyjaśnia, jak zapisać zdjęcia przy użyciu biblioteki aktywów ..

można nawet użyć ..

UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo); 

cehck się jego związek How to save picture to iPhone photo library?

+0

Próbowałem już tych samych rezultatów. Czy to możliwe, ponieważ robię zdjęcie z lokalnej biblioteki i nie zamykam go dobrze, czy coś w tym stylu? Widzę zdjęcie, które otrzymuję, ale nie mogę go zapisać. Jestem zdesperowany ... – Idan

+1

jeśli podasz przykładowy kod, z podobnym problemem, mogę pomóc .. – vishy

+1

Już to rozwiązałem, Problem nie dotyczył tego fragmentu kodu. Napisałem dokładnie powyższy problem. Dzięki. – Idan

8

prostu użyć tego poniższa linia do zapisania obrazu w bibliotece zdjęć

UIImageWriteToSavedPhotosAlbum(imageView.image,nil,nil,nil); 

:)

+1

Sądzę, że OP w szczególności pyta, jak zapisać do konkretnego albumu, a nie tylko ogólnie, jak zapisać obraz. (Rozumiem, że spóźniłem się na grę tutaj, ale wydaje mi się, że to ważne wyróżnienie). –

+0

Iran powiedział, że miał problemy z zapisaniem obrazu do albumu fotograficznego. To sprawia, że ​​brzmi to tak, jakby chciał zapisać na konkretnym albumie. 1. Idan nie zaakceptował twojej odpowiedzi. Przyjął własną odpowiedź. Przewiń w dół i spójrz. 2. Nie mylisz się, ale nie odpowiadasz na całe pytanie. Moim zdaniem, @vishy poniżej znacznie lepiej odpowiada na jednoznaczne pytanie, jak zaoszczędzić nie na rolce z aparatu, ale na konkretnym albumie. –

+0

Paras, oczywiście się nie zgadzamy, a wszelka dalsza komunikacja powinna odbywać się za pośrednictwem prywatnego czatu.Zasadniczo, z mojej perspektywy @vishy już odpowiedział na pytanie, kiedy napisał swoją odpowiedź. Twoja odpowiedź ma mniej informacji niż vishy, ​​a napisałeś ją po vishy, ​​więc wydaje mi się ona zarówno niepotrzebna, jak i gorsza ode mnie. To nie jest wielka sprawa, niezależnie. Moje jedno głosowanie nie wpłynie na twoją wiarygodność w żaden znaczący sposób. –

0

Od iOS framework 8.1 UIKit posiada funkcję UIImageWriteToSavedPhotosAlbum() jako vishy powiedział.

używam go w ten sposób:

UIImageWriteToSavedPhotosAlbum(myImage, self, "image:didFinishSavingWithError:contextInfo:", nil) 

a następnie

func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) { 
    // check error, report image has been saved, ... 
} 
0

przypadku robienia zdjęć z aparatu, a następnie można zapisać obraz w kompletowania Delegat:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *image = [info valueForKey:UIImagePickerControllerEditedImage]; 
    [library writeImageToSavedPhotosAlbum:image.CGImage metadata:[info objectForKey:UIImagePickerControllerMediaMetadata] completionBlock:^(NSURL *assetURL, NSError *error) { 
... 
    }]; 



    [picker dismissViewControllerAnimated:YES completion:nil]; 
}