Вопрос

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

Это было полезно?

Решение

UIImage имеет -initWithData: способ.Из документов:"Данные в параметре 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);

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

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

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

Примечание: Данные является Swift 3 класса.Используйте Data вместо 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...
     }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top