web-dev-qa-db-fra.com

Convertissez UIImage en NSData et enregistrez avec les données de base

J'ai un UIImageView dont l'image est définie via UIImagePicker

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    [picker dismissViewControllerAnimated:YES completion:nil];
    self.gImage.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}

J'essaie de convertir cette image en NSData et de l'enregistrer avec les données de base:

NSData *imageData = UIImagePNGRepresentation(self.gImage.image);
NSString *savedData = [[NSString alloc]initWithData:imageData encoding:NSUTF8StringEncoding];

//am is a pointer to my entities class. imageData is just a NSString attribute
am.imageData = savedData;

NSError *error;
if (![self.managedObjectContext save:&error]) {
    //Handle Error
} else {
    [self dismissViewControllerAnimated:YES completion:nil];
}

Ensuite, j'essaie de charger l'image dans un fichier séparé:

self.cell.gImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:self.myEntity.imageData]]];

Je ne vois pas pourquoi cela ne fonctionne pas. Toute aide est grandement appréciée!

18
Bad_APPZ

Vous pouvez convertir un UIImage en NSData comme ceci:

Si image PNG

UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];

Si image JPG

UIImage *image = [UIImage imageNamed:@"imageName.jpg"];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);

Vous pouvez le stocker dans CoreData comme ceci (c'est une solution utile possible):

[newManagedObject setValue:imageData forKey:@"image"];

Vous pouvez charger les données de CoreData comme ceci:

NSManagedObject *selectedObject = [[self yourFetchCOntroller] objectAtIndexPath:indexPath];
UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"image"]];

// Set the image to your image view  
yourimageView.image = image;
58
Nitin Gohel

Pour Swift c'est juste:

UIImage à NSData

imageData = UIImagePNGRepresentation(image)
10
RiceAndBytes

Sous Mac OS, vous pouvez laisser Core Data gérer cela pour vous en cochant la case Transformable sur l'attribut dans le modèle, sans sélectionner un transformateur spécifique et en affectant l'UIImage directement à la propriété.

Je ne sais pas si cela fonctionne sur iOS, mais cela pourrait valoir la peine d'être essayé.

2
paulmelnikow

Essayez ce code pour enregistrer les données d'image

sauver:

NSManagedObjectContext *context = [self managedObjectContext];

newsObj = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:context];

NSData *imageData = UIImagePNGRepresentation(self.gImage.image);

[newsObj setValue:imageData forKey:@"imgPng"];

NSError *error;

@try{

    if (managedObjectContext != nil) {

        if (![managedObjectContext save:&error]) {

            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);


        } 
    }

}@catch (NSException *exception) {

    NSLog(@"inside exception");
}

Pour revenir, essayez ceci:

NSManagedObjectContext *context = [self managedObjectContext];

    NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity1 = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:context];

    [fetchRequest setEntity:entity1];

    NSError *error;

    NSArray * array = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

    if (array == nil) {

        NSLog(@"Testing: No results found");

    }else {

        NSLog(@"Testing: %d Results found.", [array count]);
    }

    NSData * dataBytes = [[array objectAtIndex:0] imgPng];;

    image = [UIImage imageWithData:dataBytes];

    [fetchRequest release]; 


}

@catch (NSException *exception) {

    NSLog(@"inside exception");
}
1
Siba Prasad Hota

Pour convertir une image en NSData, essayez le code ci-dessous ...

UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];

faites-moi savoir que cela fonctionne ou non .. !!!

Happy Coding !!!!

1
NiravPatel

Voici ce que j'ai fait et son travail pour le stockage sur nsdata.

[productTypeSub setValue:[[NSData alloc] initWithContentsOfURL:[NSURL  URLWithString:url]] forKey:@"imgSmall"];

et chargement à l'image avec ce code

ImgProductType.image= [[UIImage alloc] initWithData:productTypeSub.imgSmall];
0
kemalony

Ce code enregistre vos données d'image dans des fichiers et vous pouvez l'utiliser n'importe où

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image1 editingInfo:(NSDictionary *)editingInfo
{

    {

        CGSize destinationSize = CGSizeMake(170,170);

        UIGraphicsBeginImageContext(destinationSize);

       [image1 drawInRect:CGRectMake(0,0,destinationSize.width,destinationSize.height)];

       UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

       UIGraphicsEndImageContext();

       NsData *filedata  = UIImagePNGRepresentation(newImage);

       [picker dismissModalViewControllerAnimated:YES];
   }
}
0
Abhishek