Как сохранить CGImage для данных в Swift?
Этот тип кода проверяет и компилирует, но затем падает. Как мне сохранить CGImage
в Data
так что я могу прочитать это позже.
let cgi: CGImage? = ...
var mData = Data()
let imageDest = CGImageDestinationCreateWithData(mData as! CFMutableData,
kUTTypePNG, 1, nil)!
CGImageDestinationAddImage(imageDest, cgi!, nil)
CGImageDestinationFinalize(imageDest)
Последняя строка вылетает. Ошибка в консоли:
2018-01-17 19:25:43.656664-0500 HelloPencil[2799:3101092] -[_NSZeroData
appendBytes:length:]: unrecognized selector sent to instance 0x1c80029c0
2018-01-17 19:25:43.658420-0500 HelloPencil[2799:3101092] *** Terminating app
due to uncaught exception 'NSInvalidArgumentException', reason:
'-[_NSZeroData appendBytes:length:]: unrecognized selector
sent to instance 0x1c80029c0'
Что снимали с Data
в CFMutableData
был рекомендован XCode, но, возможно, это не так.
1 ответ
Решение
Проблема в том, как вы создаете изменяемые данные. Просто поменяйте принудительный кастинг с Data
в CFMutableData
в CFDataCreateMutable(nil, 0)
Попробуйте вот так:
if let cgi = cgi,
let mutableData = CFDataCreateMutable(nil, 0),
let destination = CGImageDestinationCreateWithData(mutableData, "public.png" as CFString, 1, nil) {
CGImageDestinationAddImage(destination, cgi, nil)
if CGImageDestinationFinalize(destination) {
let data = mutableData as Data
if let image = UIImage(data: data) {
print(image.size)
}
} else {
print("Error writing Image")
}
}