Я могу создать UIImage
из NSData
используя [UIImage imageWithData:]
или [UIImage initWithData:]
.
Интересно, смогу ли я вернуть NSData
из существующего UIImage
? Что-то на линии NSData *myData = [myImage getData];
Я могу создать UIImage
из NSData
используя [UIImage imageWithData:]
или [UIImage initWithData:]
.
Интересно, смогу ли я вернуть NSData
из существующего UIImage
? Что-то на линии NSData *myData = [myImage getData];
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
или
NSData *imageData = UIImagePNGRepresentation(image);
В зависимости от того, хотите ли вы, чтобы ваши данные были в формате PNG или JPG.
При инициализации объекта UIImage
с помощью init(data: originalData)
эти originalData
будут преобразованы в необработанные данные в некотором внутреннем формате. Эти данные можно получить позже с помощью
let rawData = myImage.cgImage?.dataProvider?.data as Data?
Однако, поскольку rawData
является необработанным, он будет даже больше, чем при использовании UIImagePNGRepresentation
.
Вы можете ожидать, что UIImage - это объект, отформатированный для отображения, и поэтому не будет использовать исходные данные (вероятно, в формате PNG или JPEG), но скорее это пиксельный массив или какой-либо другой внутренний формат. Другими словами, UIImage(data: foo)
не сохранит foo
.
Если вы просто хотите использовать его в другом месте в своей программе, оригинальный UIImage будет хорошо (я полагаю, что на самом деле это не так)
Если вы хотите сериализовать, UIImagePNGRepresentation(...)
будет работать, но будет негабарит, если оригинал был JPEG; UIImageJPEGRepresentation(...)
часто приводит к небольшим негабаритным данным и слегка убывает, если ваш оригинал был PNG. Он должен быть в порядке, чтобы выбрать один на основе способа отображения изображения и формата, который вы ожидаете предоставить. Если вы используете PNG и хотите, чтобы PNG выходил, вы должны получить хороший размер файла и почти идентичные данные, отдельные части PNG в стороне.
Если вы хотите получить точную копию исходных данных (возможно, для сохранения файла после миниатюры или для SHA1), вам необходимо сохранить его отдельно. Вы можете сделать что-то вроде:
var image:UIImage
var imageData:NSData {
didSet {
image = UIImage(data: imageData)
}
}
Просто потому, что я наткнулся на это, и мне нравится быстро:)
Вот быстрый перевод сообщения Caroiline.
var imageData = UIImagePNGRepresentation(image)
или
var imageData = UIImageJPEGRepresentation(image, 0.7)
Swift 4.2
let dataPng = image.pngData() // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format
let dataJpg = image.jpegData(compressionQuality: 1) // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
Все изменилось с тех пор, как был указан вышеприведенный ответ, для тех, кто все еще смотрит, потому что они разделяют озабоченность CipherCom: iOS 5 добавила свойство CIImage.