NSData и UIImage
-
05-07-2019 - |
Вопрос
Я пытаюсь загрузить 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...
}
}