son que poner para pantalla movimiento las jpg imagenes heic fotos formato fondo convertir como cambiar bloqueo app iphone nsstring uiimage nsdata

iphone - que - guardar imágenes en formato de cadena(para usar en xml)... no funciona



imagenes png para iphone (1)

Estoy convirtiendo la imagen del selector en nsdata (representación jpeg) y luego convirtiéndola en nsstring usando el siguiente código

NSData *data=UIImageJPEGRepresentation(image,1.0); NSString *imageString=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; [[NSUserDefaults standardUserDefaults] setObject:imageString forKey:@"image_name"];

y en el otro extremo, donde necesito mostrar la imagen, la uiimage se forma de la siguiente manera.

NSString *imageString=[[NSString alloc] init]; imageString=[[NSUserDefaults standardUserDefaults] objectForKey:@"image_name"]; UIImage *image=[UIImage imageWithData:[imageString dataUsingEncoding:NSUTF8StringEncoding]];

la variable de imagen utilizada en el código superior no es nula, pero la imagen formada a partir de los datos es nula ... cuando se ingresa userdefaults, hay una cadena presente para la clave mencionada anteriormente. ¿Puede alguien explicar por qué es esto así ... qué es el forma correcta de hacer esto


Si pasa a través de un servidor web o similar, puede encapsularlo con base64 enc / decodificación o algún otro codificador simple.

Elimina el carácter "malo", es decir, que arruina la cadena durante la transformación y los convierte en caracteres alfabéticos genéricos y luego de nuevo.

si este es el motivo de sus problemas, aquí hay uno breve que uso (que probablemente haya robado y adaptado, pero no recuerdo de quién. Lo siento! :-))

base64helper.h

#import <Foundation/Foundation.h> @interface NSData (MBBase64)

base64helper.m

#import "base64helper.h" static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; @implementation NSData (MBBase64) + (id)dataWithBase64EncodedString:(NSString *)string; { if (string == nil) [NSException raise:NSInvalidArgumentException format:nil]; if ([string length] == 0) return [NSData data]; static char *decodingTable = NULL; if (decodingTable == NULL) { decodingTable = malloc(256); if (decodingTable == NULL) return nil; memset(decodingTable, CHAR_MAX, 256); NSUInteger i; for (i = 0; i < 64; i++) decodingTable[(short)encodingTable[i]] = i; } const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding]; if (characters == NULL) // Not an ASCII string! return nil; char *bytes = malloc((([string length] + 3) / 4) * 3); if (bytes == NULL) return nil; NSUInteger length = 0; NSUInteger i = 0; while (YES) { char buffer[4]; short bufferLength; for (bufferLength = 0; bufferLength < 4; i++) { if (characters[i] == ''/0'') break; if (isspace(characters[i]) || characters[i] == ''='') continue; buffer[bufferLength] = decodingTable[(short)characters[i]]; if (buffer[bufferLength++] == CHAR_MAX) // Illegal character! { free(bytes); return nil; } } if (bufferLength == 0) break; if (bufferLength == 1) // At least two characters are needed to produce one byte! { free(bytes); return nil; } // Decode the characters in the buffer to bytes. bytes[length++] = (buffer[0] << 2) | (buffer[1] >> 4); if (bufferLength > 2) bytes[length++] = (buffer[1] << 4) | (buffer[2] >> 2); if (bufferLength > 3) bytes[length++] = (buffer[2] << 6) | buffer[3]; } realloc(bytes, length); return [NSData dataWithBytesNoCopy:bytes length:length]; } - (NSString *)base64Encoding; { if ([self length] == 0) return @""; char *characters = malloc((([self length] + 2) / 3) * 4); if (characters == NULL) return nil; NSUInteger length = 0; NSUInteger i = 0; while (i < [self length]) { char buffer[3] = {0,0,0}; short bufferLength = 0; while (bufferLength < 3 && i < [self length]) buffer[bufferLength++] = ((char *)[self bytes])[i++]; // Encode the bytes in the buffer to four characters, including padding "=" characters if necessary. characters[length++] = encodingTable[(buffer[0] & 0xFC) >> 2]; characters[length++] = encodingTable[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)]; if (bufferLength > 1) characters[length++] = encodingTable[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)]; else characters[length++] = ''=''; if (bufferLength > 2) characters[length++] = encodingTable[buffer[2] & 0x3F]; else characters[length++] = ''=''; } return [[[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES] autorelease]; } @end