2008-11-02 11 views
58

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

ответ

43

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

+0

Да, это то, что я использую , У NSData есть адрес, а после вызова UIImaeg -initWithData: theData точка становится 0. Я не уверен, где увидеть сообщение об ошибке. – BlueDolphin 2008-11-03 00:24:22

3

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

105

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

NSData *imageData = UIImagePNGRepresentation(image); 
UIImage *image=[UIImage imageWithData:imageData]; 
21

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

UIImage *img = [UIImage imageNamed:@"image.png"]; 
NSData *data1 = UIImagePNGRepresentation(img); 
0

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

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

Примечание: данных скоро 3 класса. Использование данных вместо NSData с Swift 3

Generic операций изображения (например, детские & 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... 
    } 
}