ios - 图像是由 UIImagePickerControllerSourceTypeCamera 拍摄的如何将其保存在 ios 的数据库中

标签 ios objective-c xcode uiimage uiimagepickercontroller

.m 编码

-(IBAction) getPhoto:(id) sender {
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

} else {
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        UIAlertView *noCameraAlert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                message:@"You don't have a camera for this device" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        //shows above alert if there's no camera
        [noCameraAlert show];
    }else{
        picker.sourceType    = UIImagePickerControllerSourceTypeCamera;
        picker.allowsEditing = YES;
        picker.delegate      = self;
    }
}
[self presentViewController:picker animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
     UIImage *img     = [info objectForKey:UIImagePickerControllerOriginalImage];
img              = [info valueForKey:UIImagePickerControllerEditedImage];
self.imageView.image  = img;
imagData         = UIImagePNGRepresentation(img);
[picker dismissViewControllerAnimated:YES completion:nil];
}

现在图像已放在 ImageView 中,我如何将图像保存在数据库中

我已经有了数据库来插入数据 插入:

NSMutableArray *listItemsarr = [[NSMutableArray alloc] init];
        if([listItemsarr count]==0){
            NSString *insertQry=@"INSERT INTO selection_tbl (expenses_value,category,date,payment,description) VALUES(?,?,?,?,?)";
            sqlite3_stmt *stmt=[DB OpenSQL:[insertQry UTF8String]];
            if(stmt !=nil)
            {
                sqlite3_bind_text(stmt,1, [dataTextfield.text UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmt,2, [[selectionarray objectAtIndex:0]  UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmt,3, [[selectionarray objectAtIndex:1]  UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmt,4, [[selectionarray objectAtIndex:2]  UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmt,5, [[selectionarray objectAtIndex:3]  UTF8String], -1, SQLITE_TRANSIENT);


                sqlite3_step(stmt);
            }
            sqlite3_finalize(stmt);
            [DB CloseSQL];

以下代码用于更新数据库值 更新:

NSInteger proeditid = [primarykeyID integerValue];
        NSString *updateQry=@"update selection_tbl set expenses_value=?,category=?,date=?,payment=?,description=? where expenses_id=?";
        sqlite3_stmt *stmt=[DB OpenSQL:[updateQry UTF8String]];
        if(stmt !=nil)
        {
            sqlite3_bind_text(stmt,1, [dataTextfield.text UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt,2, [[selectionarray objectAtIndex:0] UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt,3, [[selectionarray objectAtIndex:1] UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt,4, [[selectionarray objectAtIndex:2] UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(stmt,5, [[selectionarray objectAtIndex:3] UTF8String], -1, SQLITE_TRANSIENT);


            sqlite3_bind_int(stmt,6, (int)proeditid);
            sqlite3_step(stmt);
        }
        sqlite3_finalize(stmt);
        [DB CloseSQL];

最佳答案

有两个问题:

  1. 如何获取 NSData图像的表示?

  2. 如何保存 NSData SQLite 数据库中的表示?

    保存这个NSData在您的数据库中,然后使用 sqlite3_bind_blob .该过程与 sqlite3_bind_xxx 非常相似您之前与我们分享的功能。使用 bytes NSData的方法|访问指向缓冲区的 C 样式指针,并将其传递给 sqlite3_bind_blob .

请注意,众所周知,在 SQLite 数据库中保存全尺寸图像效率低下。 SQLite 不能很好地处理大的 blob。通常人们更愿意保存 NSData到设备永久存储上的文档文件夹中的一个文件中,然后只保存 path数据库中的那个文件。

关于ios - 图像是由 UIImagePickerControllerSourceTypeCamera 拍摄的如何将其保存在 ios 的数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28935879/

相关文章:

xcode - 未连接到调试器时如何在 Apple Watch 上查看控制台输出?

objective-c - 如何从 iOS 库中提取目标文件(在 Mac 上)?

ios - UITextField NSForegroundColor 在屏幕旋转 Swift 后变为透明

ios - Apple App Store拒绝5.1.5

ios - 是否有可能在NSMutableArray中混淆addObject :?

iOS ARC Fire and Forget 异步包装的最佳实践

ios - 如何使用 Objective-C 从 Parse for iOS 中的二级指针检索值

objective-c - 锁定 Cocoa 中的嵌入资源

ios - 加载表格单元格时调用方法

xcode - 更新 Parse 类中列中的值