Speichern und Laden von UIImages
So, In meiner app, ich möchte die Benutzer in der Lage sein zu wählen/nehmen Sie ein Bild, dann zeigen Sie, dass Bild in einer UIImageView
. Das problem ist, durch meine Forschung, ich habe festgestellt, viele Möglichkeiten, um zu speichern/laden von Bildern, aber anscheinend gibt es ein problem mit zu wissen, ob das Bild ist eine .png
oder .jpg
. Also habe ich versucht eine Reihe von verschiedenen Sache, und kann nicht scheinen, um es zu arbeiten. Vielen Dank im Voraus für jede Hilfe.
Heres mein code für wenn das Bild ausgewählt ist (ich gebe dem user die Möglichkeit zu nehmen ein Bild oder wählen Sie ein Bild aus der "camera roll"):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
if (!image) image = [info objectForKey:UIImagePickerControllerOriginalImage];
if (!image)
return;
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *whichPic = @""
if (whichPicture == pictureA)
whichPic = @"kpictureA";
else
whichPic = @"kpictureB";
[defaults setObject:imageData forKey:whichPic];
[defaults synchronize];
Ich habe Versucht, aber konnte es nicht zu funktionieren:
//Create paths to output images
NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Before.png"];
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Before.jpg"];
//Write a UIImage to JPEG with minimum compression (best quality)
//The value 'image' must be a UIImage object
//The value '1.0' represents image compression quality as value from 0.0 to 1.0
[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpgPath atomically:YES];
//Write image to PNG
[UIImagePNGRepresentation(image) writeToFile:pngPath atomically:YES];
//Let's check to see if files were successfully written...
//Create file manager
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];
//Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
//Write out the contents of home directory to console
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
*/
Ich auch ausprobiert, aber ohne Erfolg:
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSDictionary *metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];
[library writeImageToSavedPhotosAlbum:[image CGImage] metadata:metadata completionBlock:nil];
Dann laden Sie das Bild, wenn die Ansicht geladen, ich versuchte dies:
//Create paths to output images
NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Before.png"];
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Before.jpg"];
//Let's check to see if files were successfully written...
//Create file manager
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];
//Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
//Write out the contents of home directory to console
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
if ([[fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error] containsObject:@"pictureA.png"]) {
NSData *imageData = [fileMgr contentsAtPath:@"Documents/Before.png"];
[pcitureAButton setImage:[UIImage imageWithData:imageData] forState:UIControlStateNormal];
}
else if ([fileMgr contentsAtPath:@"Documents/pictureA.png"]) {
NSData *imageData = [fileMgr contentsAtPath:@"Documents/pictureA.png"];
[pictureButton setImage:[UIImage imageWithData:imageData] forState:UIControlStateNormal];
}
Dann habe ich versucht, dieses:
if([defaults valueForKey:@"kPictureA"]) {
UIImage *image = [[UIImage alloc] initWithData:[defaults valueForKey:kPictureA]];
[pictureAButton setImage:image forState:UIControlStateNormal];
}
und schließlich habe ich versucht, eine mit NSData
mit NSUserDefeaults
.
Ich würde es vorziehen, zu verwenden NSUserDefaults, weil ich mich am wohlsten fühle mit Ihnen, aber ich habe ganz offen, die Lösung, die funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, was ich verwenden:
Nehmen Sie ein Foto
Wählen Sie Foto aus der Bibliothek
Reagiert werden, um den Benutzer durch Tippen auf Abbrechen.
Reagiert werden, um den Benutzer zu akzeptieren, eine neu-aufgenommene Bild
BEARBEITEN
Überprüfen Sie die Datei-Typ Sie können examin die ersten NSData byte mit der folgenden Methode:
UIImage
, weil, um zu überprüfen, dieNSData
sehen, wenn Ihr ein jpeg/png, muss ich es konvertieren zu NSData. Und konvertieren es zu NSData, ich muss wissen, ob es ein jpeg oder png. hahaSobald Sie das Bild in eine UIImageView können Sie entscheiden, um es zu speichern, in welchem format Sie bevorzugen
Des NSData-Linie wandelt sich das Bild von der UIImageView.Bild in ein PNG-format und somit ist gespeichert als png mit dem .png-Datei-Erweiterung
WENN ich wollte, um es zu speichern als JPEG
ändern Sie einfach die imageName zu " @"Image.jpg" und ändern UIImagePNGRepresentation
zu UIImageJPEGRepresentation
nun das gleiche Bild im jpeg-Format gespeichert. Sie entscheiden über das format und verwenden Sie dann die passende Datei-Erweiterung und-Vertretung anrufen
Cyprian Antwort gibt Ihnen eine Methode, um das Bild Lesen (aus Datei in NSData) und stellen Sie sicher, dass es ein PNG oder JPEG, usw..