2009-09-28 13 views
8

Ich verwende UIImageWriteToSavedPhotosAlbum, um ein UIImage im Fotoalbum des Benutzers zu speichern. Das Problem ist, dass das Bild keine Transparenz hat und ein JPG ist. Ich habe die Pixel-Daten korrekt auf Transparenz, aber es scheint keine Möglichkeit zu sein, in einem Transparenz-unterstützten Format zu speichern. Ideen?UIImageWriteToSavedPhotosAlbum als PNG mit Transparenz speichern?

EDIT: Es gibt keine Möglichkeit, dies zu erreichen, jedoch gibt es andere Möglichkeiten, PNG-Bilder an den Benutzer zu liefern. Eine davon ist, das Bild im Verzeichnis Dokumente zu speichern (wie unten beschrieben). Sobald Sie das getan haben, können Sie es per E-Mail versenden, in einer Datenbank speichern, usw. Sie können es (solange es noch nicht vorhanden ist) einfach nicht ins Fotoalbum bringen, es sei denn, es handelt sich um ein verlustreiches, nicht transparentes JPG.

Antwort

12

Dies ist ein Problem, das ich schon vor einem Jahr bemerkt und über die Apple Developer Forums berichtet habe. Soweit ich weiß, ist es immer noch ein offenes Thema.

Wenn Sie einen Moment Zeit haben, nehmen Sie sich bitte die Zeit, um eine Feature-Anfrage unter Apple Bug Report einzureichen. Wenn mehr Personen dieses Problem melden, ist es wahrscheinlicher, dass Apple diese Methode zur Ausgabe von nicht verlustbehafteten, alpha-fähigen PNGs korrigiert.

EDIT

Wenn Sie Ihr Bild im Speicher zusammenstellen kann, glaube ich, so etwas wie die folgenden funktionieren würde, oder zumindest erhalten Sie begonnen:

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

Geschehen und erledigt. Ich habe gehört, dass es eine Möglichkeit gibt, Bilder in einem verlustfreien Format in den Dokumentenordner zu speichern. Irgendeine Idee, wie man das macht? – Eli

+0

Ich habe meine Antwort aktualisiert. Hoffentlich hilft dir das beim Einstieg. –

+0

Schön! Hat Wunder gewirkt. Das Bild ist ein PNG und hat Transparenz, ich musste es nur finden und das war es. – Eli

33

Wie darauf hingewiesen, auf this SO dort in Frage ist eine einfache Art und Weise pngs in Ihrem Fotoalbum zu speichern:

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

Danke. Klappt wunderbar. – Bram

+0

Perfekt. Danke fürs Schreiben. – Mrwolfy

Verwandte Themen