Tom*_*uce 2 uiimageview uiimage nsdata ios
我正在尝试从我的数据库中显示图像.
这部分很好用.我将图像保存在DB中,如下所示:
UIImage *resizedImg = [Generics scaleImage:self.photo.image toResolution:self.photo.frame.size.width and:self.photo.frame.size.height];
NSData *imgData = UIImageJPEGRepresentation(resizedImg, 0.9);
NSString *stringDataImage = [NSString stringWithFormat:@"%@",imgData];
[dict setObject:stringDataImage for key@"image"];
// POST Request to save the image in DB ...
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试加载图像并将其设置为我时,UIImageView我这样做:
NSData *data = [[[MyUser sharedUser] picture] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data]];
Run Code Online (Sandbox Code Playgroud)
要么
NSData *data = [[[MyUser sharedUser] picture] dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
self.imageView.image = [UIImage withData:data];
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
data不等于imgData,我认为这是编码,但我可以找到好的编码.并[UIImage withData:data]返回零;
你能帮助我吗?
编辑:
转换并保存
UIImage *resizedImg = [Generics scaleImage:self.photo.image toResolution:self.photo.frame.size.width and:self.photo.frame.size.height];
NSData *imgData = UIImageJPEGRepresentation(resizedImg, 0.9);
[dict setObject:[imgData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength] forKey:@"image"];
Run Code Online (Sandbox Code Playgroud)
加载图像
NSData *data = [[NSData alloc] initWithBase64EncodedData:[[MyUser sharedUser] picture] options:kNilOptions];
NSLog(@"%@", data);
self.image.image = [UIImage imageWithData:data];
Run Code Online (Sandbox Code Playgroud)
您正在将NSData字符串转换为字符串并将其保存到数据库中.两个问题:
您选择使用stringWithFormat构造是数据的低效字符串表示(导致字符串表示大小大约是其大小的两倍).您可能希望使用base64(字符串表示仅增加33%).
您正在保存字符串表示形式,但在检索它之后永远不会将其转换回二进制格式.您可以编写一个例程来执行此操作,但最好只使用已建立的base64格式.
如果要将图像保存为数据库中的字符串,则应使用base64.从历史上看,我们会将您引导到许多第三方库中的一个(请参阅如何在iphone-sdk上执行base64编码?),以便从二进制数据转换为base64字符串(并返回),或者,iOS 7现在具有本机基础64编码(并公开私有iOS 4方法,以防您需要支持早期版本的iOS).
因此要转换NSData为NSStringbase64表示:
NSString *string;
if ([data respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
string = [data base64EncodedStringWithOptions:kNilOptions]; // iOS 7+
} else {
string = [data base64Encoding]; // pre iOS7
}
Run Code Online (Sandbox Code Playgroud)
并将base64字符串转换回NSData:
NSData *data;
if ([NSData instancesRespondToSelector:@selector(initWithBase64EncodedString:options:)]) {
data = [[NSData alloc] initWithBase64EncodedString:string options:kNilOptions]; // iOS 7+
} else {
data = [[NSData alloc] initWithBase64Encoding:string]; // pre iOS7
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2081 次 |
| 最近记录: |