NSData и UIImage

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

Ответ 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...
     }
}