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.

InformationsquelleAutor Andrew | 2011-12-30
Schreibe einen Kommentar