Я пытаюсь загрузить объект UIImage из NSData, а пример кода был для NSImage, я думаю, они должны быть такими же. Но как раз сейчас загружая изображение, мне интересно, что лучше всего для устранения проблемы с загрузкой UIImageNSData.





UIImage имеет метод -initWithData:. Из документации: «Данные в параметре данных должны быть отформатированы, чтобы соответствовать формату файла одного из поддерживаемых системой типов изображений».
theData должен быть объектом NSData, который уже содержит данные. Вам необходимо выполнить загрузку / скачивание файла в объект NSData перед его использованием. Вы можете проверить его, используя NSLog в Data, и посмотреть, содержит ли он действительные данные.
Раньше я не пробовал UIImageJPEGRepresentation(), но UIImagePNGRepresentation мне подходит, а преобразование между NSData и UIImage очень простое:
NSData *imageData = UIImagePNGRepresentation(image);
UIImage *image=[UIImage imageWithData:imageData];
Попробуйте это, чтобы преобразовать изображение в NSdata:
UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);
Для безопасного выполнения кода используйте блок if-let с данными, поскольку функция UIImagePNGRepresentation возвращает необязательное значение.
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
Note: Data is Swift 3 class. Use Data instead of NSData with 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...
}
}
Да, вот что я использую. NSData имеет адрес, а после вызова UIImaeg -initWithData: theData точка становится 0. Я не уверен, где увидеть сообщение об ошибке.