Я пытаюсь загрузить объект UIImage
из NSData
, а пример кода - NSImage
, я думаю, они должны быть одинаковыми. Но сейчас, загружая изображение, мне интересно, как лучше всего устранить проблему UIImage
loading NSData
.
NSData и UIImage
Ответ 1
UIImage имеет метод - initWithData:
. Из документов: "Данные в параметре данных должны быть отформатированы в соответствии с файловым форматом одного из поддерживаемых систем типов изображений".
Ответ 2
Я не пробовал UIImageJPEGRepresentation()
раньше, но UIImagePNGRepresentation
отлично работает для меня, а преобразование между NSData
и UIImage
мертво просто:
NSData *imageData = UIImagePNGRepresentation(image);
UIImage *image=[UIImage imageWithData:imageData];
Ответ 3
Попробуйте преобразовать изображение в NSdata:
UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);
Ответ 4
theData должен быть объектом NSData
, который уже содержит данные. Вам необходимо выполнить загрузку/загрузку файла в объект NSData
до его использования. Вы можете проверить его, используя NSLog
в Data и посмотреть, содержит ли он действительные данные.
Ответ 5
Для безопасного выполнения кода используйте блок if-let с данными, так как возвращает функция UIImagePNGRepresentation, необязательное значение.
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
Примечание. Данные - это класс Swift 3. Используйте данные вместо NSData с Swift 3
Общие операции с изображениями (например, png и jpg):
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
handleOperationWithData(data: data)
} else if let data:Data = UIImageJPEGRepresentation(img, 1.0) {
handleOperationWithData(data: data)
}
}
*******
func handleOperationWithData(data: Data) {
// Handle operations with data here...
if let image = UIImage(data: data) {
// Use image...
}
}
Используя расширение:
extension UIImage {
var pngRepresentationData: Data? {
return UIImagePNGRepresentation(img)
}
var jpegRepresentationData: Data? {
return UIImageJPEGRepresentation(self, 1.0)
}
}
*******
if let img = UIImage(named: "Hello.png") {
if let data = img.pngRepresentationData {
handleOperationWithData(data: data)
} else if let data = jpegRepresentationData {
handleOperationWithData(data: data)
}
}
*******
func handleOperationWithData(data: Data) {
// Handle operations with data here...
if let image = UIImage(data: data) {
// Use image...
}
}