NSData и UIImage - PullRequest
       33

NSData и UIImage

59 голосов
/ 03 ноября 2008

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

Ответы [ 5 ]

105 голосов
/ 10 марта 2011

Я не пробовал UIImageJPEGRepresentation() раньше, но UIImagePNGRepresentation отлично работает для меня, и преобразование между NSData и UIImage очень просто:

NSData *imageData = UIImagePNGRepresentation(image);
UIImage *image=[UIImage imageWithData:imageData];
44 голосов
/ 03 ноября 2008

UIImage имеет метод - initWithData:. Из документов: «Данные в параметре данных должны быть отформатированы в соответствии с форматом файла одного из поддерживаемых системой типов изображений».

21 голосов
/ 10 августа 2011

Попробуйте преобразовать изображение в NSdata:

UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);
3 голосов
/ 03 ноября 2008

theData должен быть NSData объектом, который уже содержит данные. Вам необходимо выполнить загрузку / загрузку файла в объект NSData перед его использованием. Вы можете проверить его, используя NSLog в theData и посмотреть, содержит ли он действительные данные.

0 голосов
/ 06 сентября 2017

Для безопасного выполнения кода используйте блок if-let с данными, так как функция UIImagePNGRepresentation возвращает необязательное значение.

if let img = UIImage(named: "Hello.png") {
    if let data:Data = UIImagePNGRepresentation(img) {
       // Handle operations with data here...         
    }
}

Примечание: Данные - это класс Swift 3. Используйте данные вместо NSData с Свифт 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...
     }
}
...