ios objective-c core-data nsdata

ios - Convertir UIImage a NSData y guardar con datos básicos



objective-c core-data (8)

Tengo un UIImageView cuya imagen se establece a través de UIImagePicker

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

"Intento" convertir esta imagen a NSData y guardarla con datos básicos:

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]; }

Luego trato de cargar la imagen en un archivo separado:

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

No puedo ver por qué esto no funciona. ¡Cualquier ayuda es muy apreciada!


En Mac OS, puede dejar que Core Data lo maneje por usted marcando la casilla Transformable en el atributo en el modelo, sin seleccionar un transformador específico y asignando el UIImage directamente a la propiedad.

No estoy seguro de si funciona en iOS pero vale la pena intentarlo.


Este código guarda los datos de su imagen en archivados y puede usarlos en cualquier lugar

-(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]; } }


Esto es lo que he hecho y está trabajando para almacenar nsdata.

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

y cargando a imagen con este código.

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


Para almacenar en la base de datos :::

NSInteger RandomIndex = arc4random() % 1000; NSString *randomImageName =[NSString stringWithFormat:@"Image%i.png",RandomIndex]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:randomImageName]; if ([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]) { [[NSFileManager defaultManager] removeItemAtPath:savedImagePath error:nil]; NSLog(@"file removed from path"); } NSLog(@"Saved Image Path : %@",savedImagePath); NSData* imageData = UIImagePNGRepresentation (image1 ); [imageData writeToFile:savedImagePath atomically:YES]; //am is a pointer to my entities class. imageData is just a NSString attribute am.imageData = randomImageName;

Cuando obtenga esa imagen de la base de datos, puede escribir el siguiente código ...

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:randomImageName]; NSData *myData = [NSData dataWithContentsOfFile:savedImagePath]; UIImage *selectedImage = [UIImage imageWithData:myData];

Creo que es útil para usted.


Para convertir una imagen a NSData, intente a continuación el código ...

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

Déjame saber si está funcionando o no .. !!!

Feliz codificacion !!!!


Para swift es justo:

UIImage a NSData

imageData = UIImagePNGRepresentation(image)


Pruebe este código para guardar datos de imagen

ahorrar:

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"); }

Para recuperar Intente esto:

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"); }


Puedes convertir un UIImage a NSData de esta manera:

Si la imagen PNG

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

Si la imagen JPG

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

Puede almacenarlo en CoreData así (esta es una posible solución útil):

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

Puedes cargar los datos de CoreData así:

NSManagedObject *selectedObject = [[self yourFetchCOntroller] objectAtIndexPath:indexPath]; UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"image"]]; // Set the image to your image view yourimageView.image = image;