저장하기
1. Image를 Base64로 인코딩한다
func EncodeImageToBase64(image: UIImage) -> String {
let imageData = image.jpegData(compressionQuality: 1)! as NSData
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
return strBase64
}
이때, image를 jpeg 형식의 데이터로 변환해야 한다.
png 형식은 이미지의 방향 정보를 갖고있지 않기 때문에, png로 저장하게 되면 나중에 load 할 때 원본 이미지 방향이 잘못될 수 있다! ( 이미지가 90도, 180도 회전할 수 있다)
2. INSERT QUERY로 이미지를 저장한다.
func save(item: DiaryItem) {
let INSERT_QUERY = """
INSERT INTO \(TABLE_NAME)
(\(IMAGE))
VALUES (?);
"""
var stmt: OpaquePointer?
if sqlite3_prepare_v2(db, INSERT_QUERY, -1, &stmt, nil) == SQLITE_OK{
let image = EncodeImageToBase64(image: item.image) as NSString // KEY POINT!!!
sqlite3_bind_text(stmt, 1, image.utf8String, -1, nil)
if sqlite3_step(stmt) == SQLITE_DONE {
print("\nSuccessfully inserted row.")
} else {
print("\nCould not insert row.")
}
} else {
print("\nINSERT statement is not prepared.")
}
sqlite3_finalize(stmt)
}
로드하기
1. SELECT Query로 sqlite db에서 데이터 읽어오기
func load() -> [DiaryItem]{
var items: [DiaryItem] = []
let SELECT_QUERY = "SELECT * FROM \(TABLE_NAME)"
var stmt:OpaquePointer?
if sqlite3_prepare(db, SELECT_QUERY, -1, &stmt, nil) != SQLITE_OK{
let errMsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing insert: v1\(errMsg)")
return items
}
while(sqlite3_step(stmt) == SQLITE_ROW){
let image = DecodeBase64ToImage(strBase64: String(cString: sqlite3_column_text(stmt, 7))) // KEY POINT!!!!
let item = DiaryItem(image: image)
items.append(item)
}
return items
}
2. Base64로 저장된 데이터를 디코딩하기
func DecodeBase64ToImage(strBase64: String) -> UIImage {
let decodedData = Data(base64Encoded: strBase64, options: .ignoreUnknownCharacters)
guard let data = decodedData else { return UIImage() }
let decodedimage = UIImage(data: data)!
return decodedimage
}
'iOS > Swift' 카테고리의 다른 글
[Swift] 고차함수(High-order function) - map, filter, reduce (0) | 2022.01.24 |
---|---|
[iOS] Safe Area란? (0) | 2022.01.12 |
[iOS] UIImage -> CGImage 변환시 이미지 방향이 변하지 않게 하기 (0) | 2022.01.09 |
[iOS] UIImagePickerController에서 가져온 이미지에서 GPS 정보 파싱하기 (0) | 2021.12.25 |
[iOS] 함수형 언어 Swift - 일급 함수 (0) | 2021.12.22 |