我找到了一个解决方案,将图像序列化为一个sql脚本,然后将它们插入db(blob列)。
我从这样的图像提取NSData NSData *thumbailData = [thumbnail TIFFRepresentation];
(感谢尼克)。
我解压缩NSData后,我使用下面的方法将其转换为十六进制字符串。我将它添加到NSData的一个类别。
- (NSString*) hexString {
NSMutableString *stringBuffer = [NSMutableString
stringWithCapacity:([self length] * 2)];
const unsigned char *dataBuffer = [self bytes];
int i;
for (i = 0; i < [self length]; ++i)
[stringBuffer appendFormat:@"%02x", (unsigned long)dataBuffer[ i ]];
return [[stringBuffer copy] autorelease];
}
NSString *hexRepresentation = [thumbnailData hexString];
的hexRepresentation看上去象这样:
4d4d002a00005a48fafafafff8f8f8fff8f8f8fff9f9f9fff8f8f8fff8f8f8 ...
为了序列图像的hexRepresentation我创建了一个SQL脚本,象下面这样:
INSERT INTO Thumbnails (Picture_uid, Thumbnail) Values(10, x'4d4d002a00005a48fafafafff8f8f8fff8f8f8fff9f9f9fff8f8f8fff8f8f8 … ‘) ;
x'数据'告诉db它将以十六进制格式接收信息,并且它会知道如何处理它。
此解决方案的问题之一是它会使脚本大小加倍。如果你将有一个200kb的图像,脚本将有400kb,但在数据库中的图像将是200kb。
对我来说,这是一个很好的解决方案,使用sql脚本更新我的数据库而无需编写任何代码。
看看[SQLite中的BLOB?](http://stackoverflow.com/questions/4981154/blob-in-sqlite) – 2011-04-19 15:28:49
我存储图像的列是Blob类型。 – 2011-04-26 06:59:20