2009-09-28 19 views
8

Używam UIImageWriteToSavedPhotosAlbum, aby zapisać UIImage do albumu fotograficznego użytkownika. Problem polega na tym, że obraz nie jest przezroczysty i jest plikiem JPG. Mam poprawnie ustawiony zestaw danych pikseli na , który ma przezroczystość, ale wydaje się, że nie ma sposobu na zapisanie w formacie obsługiwanym przez przezroczystość. Pomysły?UIImageWriteToSavedPhotosAlbum zapisać jako PNG z przezroczystością?

EDYCJA: Nie można tego zrobić, ale istnieją inne sposoby dostarczania obrazów PNG do użytkownika. Jednym z nich jest zapisanie obrazu w katalogu dokumentów (jak opisano poniżej). Kiedy już to zrobisz, możesz wysłać go e-mailem, zapisać w bazie danych itp. Nie możesz po prostu umieścić go w albumie fotograficznym (na razie), chyba że jest to nieprzezroczysty nieprzejrzysty plik JPG.

Odpowiedz

12

Jest to problem, który zauważyłem wcześniej i zgłoszono na temat Apple Developer Forums około roku temu. O ile mi wiadomo, nadal jest to kwestia otwarta.

Jeśli masz chwilę, poświęć chwilę, aby złożyć wniosek o funkcję pod numerem Apple Bug Report. Jeśli więcej osób zgłasza ten problem, jest bardziej prawdopodobne, że Apple naprawi tę metodę, aby wyprowadzać bezstratny PNG z obsługą alfa.

EDIT

Jeśli można skomponować obraz w pamięci, myślę, że coś jak poniżej będzie działać albo przynajmniej na początek:

- (UIImage *) composeImageWithWidth:(NSInteger)_width andHeight:(NSInteger)_height { 
    CGSize _size = CGSizeMake(_width, _height); 
    UIGraphicsBeginImageContext(_size); 

    // Draw image with Quartz 2D routines over here... 

    UIImage *_compositeImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return _compositeImage; 
} 

// 
// cf. https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/FilesandNetworking/FilesandNetworking.html#//apple_ref/doc/uid/TP40007072-CH21-SW20 
// 

- (BOOL) writeApplicationData:(NSData *)data toFile:(NSString *)fileName { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    if (!documentsDirectory) { 
     NSLog(@"Documents directory not found!"); 
     return NO; 
    } 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName]; 
    return ([data writeToFile:appFile atomically:YES]); 
} 

// ... 

NSString *_imageName = @"myImageName.png"; 
NSData *_imageData = [NSData dataWithData:UIImagePNGRepresentation([self composeImageWithWidth:100 andHeight:100)]; 

if (![self writeApplicationData:_imageData toFile:_imageName]) { 
    NSLog(@"Save failed!"); 
} 
+0

Gotowe i Gotowe. Słyszałem, że istnieje sposób na zapisywanie obrazów w folderze dokumentów w formacie bezstratnym. Masz pomysł, jak to zrobić? – Eli

+0

Zaktualizowałem moją odpowiedź. Mam nadzieję, że to pomoże ci zacząć. –

+0

Piękne! Działały cuda. Obraz jest PNG i ma przejrzystość, po prostu potrzebowałem go znaleźć i to było to. – Eli

33

Jak wskazano na this więc pytanie jest prosty sposób zapisać PNG w swoich albumów fotograficznych:

UIImage* image = ...;          // produce your image 
NSData* imageData = UIImagePNGRepresentation(image);  // get png representation 
UIImage* pngImage = [UIImage imageWithData:imageData]; // rewrap 
UIImageWriteToSavedPhotosAlbum(pngImage, nil, nil, nil); // save to photo album 
+0

Dzięki. Działa jak marzenie. – Bram

+0

Idealny. Dzięki za publikację. – Mrwolfy

Powiązane problemy