2014-10-10 20 views
10

Dzięki za przeczytanie. Utworzyłem GIF przy użyciu metod z tym pytanie:Zapisz wygenerowany GIF do rolki aparatu?

Create and and export an animated gif via iOS?

Próbuję użyć jedyną metodą, która wydaje się być w stanie zapisywać obrazy niż JPG/PNG do rolki aparatu, ALAssetLibrary „s writeImageDataToSavedPhotosAlbum:metadata:completionBlock:

zapisać Gif do katalogu temp tak:

NSString *exportPath = [NSTemporaryDirectory() stringByAppendingString:@"/animated.gif"]; 
NSURL *fileURL = [NSURL fileURLWithPath:exportPath isDirectory:NO]; 

Wtedy dostęp do NSData jak:

NSData * gifData = [NSData dataWithContentsOfFile:fileURL.absoluteString]; 

GIF jest tworzony tak, jak jestem w stanie go wyświetlić w UIImageView, ale kiedy próbuję go zapisać, metoda zwraca jako sukces (bez błędu), ale nie zapisuje (zwraca Nil dla NSURL * assetURL i nie pojawia się w rolce aparatu).

W jaki sposób mogę uzyskać, że moje pliki GIF zostaną pomyślnie zapisane na rolce z aparatu?

+0

Dodano 2 rozwiązania. Najpierw wystarczy zapisać istniejący GIF w rolce z aparatu. Drugi używa biblioteki (http://jitsik.com/wordpress/?p=208) do tworzenia i zapisywania GIF-a w Rolce z aparatu. Sprawdź mój widelec GIT. – bllakjakk

Odpowiedz

2

znalazłem problem było to, że nie był w stanie właściwie chwycić GIF z pliku. Przełączyłem z użycia CGImageDestinationCreateWithURL na CGImageDestinationCreateWithData i użyłem CFMutableDataRef do przechowywania danych Gif. Nie wiem dlaczego, ale to pozwoliło zaoszczędzić na rolce z aparatu z pracą writeImageDataToSavedPhotosAlbum.

10

**

Rozwiązanie 01: Dopiero zapisanie istniejącego pliku GIF Camera Roll

**

Jak rozumiem problem. Jesteś w stanie wygenerować plik GIF, ale nie możesz go zapisać, a także wyświetlić go w rolce z aparatu.

Dołączam więc przykładowy test z użyciem istniejącego pliku GIF.

Krok 01. Skopiowałem plik gif IMG_0009.GIF do mojego katalogu dokumentu aplikacji.

Krok 02 niż używam poniższy kod, aby załadować ten plików NSData:

NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; 
NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:@"IMG_0009.gif"]; 

NSData *gifData = [NSData dataWithContentsOfFile:[fileURL path]]; 

Krok 03: Teraz zapisz plik w mediach katalogu:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
[library writeImageDataToSavedPhotosAlbum:gifData metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { 

    NSLog(@"Success at %@", [assetURL path]); 
}]; 

URL zasobu jest prawidłowy. Teraz możesz sprawdzić swój katalog multimediów. możesz zlokalizować zapisany obraz gif.

Have Fun :)


**

Rozwiązanie 02: Demo Tworzenie i zapisywanie GIF do rolki aparatu

**

Sklonowałem pewne rozwiązanie, aby pokazać tworzenie i zapisywanie plików GIF w rolce z aparatu. można pobrać i sprawdzić mój widelec na github:

Demo tworzy plik GIF poprzez 2 lub więcej obrazów i zapisać w Camera Roll katalogu

https://github.com/bllakjakk/Giraffe

główny kod skupić jest jak poniżej:

[export encodeToFile:tempFile callback:^(NSString * aFile) { 

    NSLog(@"Path: %@", aFile); 

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

    NSData *data = [NSData dataWithContentsOfURL:[[NSURL alloc]initFileURLWithPath:aFile]]; 

    [library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { 

     NSLog(@"Success at %@", [assetURL path]); 
    }]; 

}];

Korzysta z biblioteki jak wspomniałem w moim roztwór przed http://jitsik.com/wordpress/?p=208

Jak zweryfikować:

Krok 01: uruchomić projekt demo.

Krok 02: Zgodnie z poleceniami aplikacji dodaj 2 obrazy i kliknij Eksportuj.

Krok 03: Teraz sprawdź rolkę kamery, znajdziesz utworzony gif.

Poprzedni:

GIF jest zastrzeżony format, więc będzie trzeba 3rd party lib aby go zapisać.

sprawdzić poniższy link: http://jitsik.com/wordpress/?p=208

+0

Stworzyłem nagrodę, jeśli możesz pokazać mi, jak można to wykorzystać do zapisania w rolce z aparatu? –

+0

Gdy znalazłem rozwiązanie samodzielnie, mogę uciec się do tego, jeśli nie mogę zmniejszyć rozmiaru GIF na tyle, aby nie rozbić się na większych plikach. –

+2

Każdy pomysł, jak to zrobić, korzystając ze struktury zdjęć? – user379468

2

Czy zaktualizowano ten system do pracy z systemem iOS 9 i wycofaniem ALAssets? Nie widzę podobnych wywołań w PHPhotoLibrary.

+0

jak to jest odpowiedź? –