Получить базовые NSData из UIImage
Я могу создать UIImage из NSData с помощью [UIImage imageWithData:]
или [UIImage initWithData]
метод.
интересно, если я могу получить NSData обратно из существующего UIImage?
Что-то на линии NSData *myData = [myImage getData];
5 ответов:
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
или
NSData *imageData = UIImagePNGRepresentation(image);
в зависимости от того, хотите ли вы, чтобы ваши данные были в формате PNG или JPG.
вы можете ожидать, что UIImage-это объект, отформатированный для отображения, и поэтому не будет использовать исходные данные (которые, вероятно, в формате PNG или JPEG), но, скорее всего, массив пикселей или какой-либо другой внутренний формат. Другими словами,
UIImage(data: foo)
не будет удерживатьfoo
.
если вы просто хотите использовать его в другом месте в своей программе, исходный UIImage будет работать нормально (я предполагаю, что на самом деле это не так)
если вы хотите, чтобы serialise,
UIImagePNGRepresentation(...)
будет работать, но будет слишком большим, если оригинал был JPEG;UIImageJPEGRepresentation(...)
часто приводит к слегка негабаритных данных и немного потерями, если ваш оригинал был PNG. Это должно быть хорошо, чтобы выбрать один на основе того, как изображение будет отображаться и формат, который вы ожидаете быть предоставлены. Если вы используете PNG in и хотите PNG out, вы должны получить хороший размер файла и почти идентичные данные, специальные куски PNG в сторону.если вы хотите получить точную копию исходные данные (возможно, чтобы сохранить файл после эскизов, или SHA1 его), то вам нужно сохранить его отдельно. Вы можете сделать что-то вроде:
var image:UIImage var imageData:NSData { didSet { image = UIImage(data: imageData) } }
при инициализации a
UIImage
объектinit(data: originalData)
, чтоoriginalData
будут преобразованы в необработанные данные в каком-то внутреннем формате. Эти данные могут быть получены позже с помощьюпотому чтоlet rawData = myImage.cgImage?.dataProvider?.data as Data?
rawData
является raw, он будет еще больше, чем при использованииUIImagePNGRepresentation
.
просто потому, что я наткнулся на это, и мне нравится swift:)
вот быстрый перевод сообщения Каролины.
var imageData = UIImagePNGRepresentation(image)
или
var imageData = UIImageJPEGRepresentation(image, 0.7)
все изменилось с тех пор, как был дан вышеупомянутый ответ, для тех, кто все еще ищет, потому что они разделяют озабоченность CipherCom: iOS 5 добавила свойство CIImage.