gpt4 book ai didi

ios - 从 SQL 数据库保存和加载图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:56 26 4
gpt4 key购买 nike

我正在尝试显示来 self 的数据库的图像。

这部分工作得很好。我像这样将图像保存在数据库中:

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 ...

现在,当我尝试加载图像并将其设置到我的 UIImageView 时,我会这样做:

NSData *data = [[[MyUser sharedUser] picture] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data]];

或者

NSData *data = [[[MyUser sharedUser] picture] dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
self.imageView.image = [UIImage withData:data];

但这行不通。

data 不等于 imgData,我认为是编码问题,但我能找到合适的。并且 [UIImage withData:data] 返回 nil;

你能帮帮我吗?

编辑:

转换并保存

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

加载图片

NSData *data = [[NSData alloc] initWithBase64EncodedData:[[MyUser sharedUser] picture] options:kNilOptions];
NSLog(@"%@", data);
self.image.image = [UIImage imageWithData:data];

最佳答案

您正在将 NSData 转换为字符串并将其保存到您的数据库中。两个问题:

  1. 您选择使用 stringWithFormat 构造是数据的低效字符串表示(导致字符串表示的大小大约是原来的两倍)。您可能想要使用 base64(字符串表示仅大 33%)。

  2. 您正在保存您的字符串表示形式,但在检索它之后从未将其转换回二进制格式。您可以编写例程来执行此操作,但最好只使用已建立的 base64 格式。

如果你想将图像保存为数据库中的字符串,你应该使用 base64。从历史上看,我们会将您引导至众多第三方库之一(参见 How do I do base64 encoding on iphone-sdk? ),用于将二进制数据转换为 base64 字符串(并返回),或者,iOS 7 现在具有 native base 64 encoding (并公开私有(private) iOS 4 方法,以防您需要支持早期版本的 iOS)。

从而将NSData转换为NSString base64表示:

NSString *string;

if ([data respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
string = [data base64EncodedStringWithOptions:kNilOptions]; // iOS 7+
} else {
string = [data base64Encoding]; // pre iOS7
}

并将 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
}

关于ios - 从 SQL 数据库保存和加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19792197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com