2009-09-28 17 views
8

Sto utilizzando UIImageWriteToSavedPhotosAlbum per salvare un UIImage nell'album fotografico dell'utente. Il problema è che l'immagine non ha trasparenza ed è un JPG. I dati pixel impostati correttamente su hanno la trasparenza, ma non sembra che ci sia un modo per salvare in un formato supportato da trasparenza. Idee?UIImageWriteToSavedPhotosAlbum salva come PNG con trasparenza?

MODIFICA: non c'è modo di farlo, tuttavia ci sono altri modi per fornire immagini PNG all'utente. Uno dei quali è salvare l'immagine nella directory Documenti (come indicato di seguito). Dopo averlo fatto, puoi inviarlo via e-mail, salvarlo in un database, ecc. Non è possibile inserirlo nell'album fotografico (per ora) a meno che non sia un JPG non trasparente.

risposta

12

Questo è un problema che ho notato prima e riportato sullo Apple Developer Forums circa un anno fa. Per quanto ne so, è ancora un problema aperto.

Se si dispone di un momento, si prega di prendere il tempo di presentare una richiesta di funzionalità a Apple Bug Report. Se più persone segnalano questo problema, è più probabile che Apple corregga questo metodo per generare PNG non-lossy e con capacità alfa.

EDIT

Se è possibile comporre l'immagine in memoria, penso che qualcosa di simile al seguente avrebbe funzionato o almeno iniziare:

- (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

fatto e fatto. Ho sentito che esiste un modo per salvare le immagini nella cartella dei documenti in un formato non-lossy. Qualche idea di come farlo? – Eli

+0

Ho aggiornato la mia risposta. Spero che questo ti aiuti a iniziare. –

+0

Bello! Ha fatto meraviglie. L'immagine è un file PNG e ha trasparenza, avevo solo bisogno di trovarlo e basta. – Eli

33

Come sottolineato su this domanda SO lì è un modo semplice per salvare PNG nei vostri album di foto:

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

Grazie. Funziona come un fascino. – Bram

+0

Perfetto. Grazie per la pubblicazione. – Mrwolfy

Problemi correlati