Получить базовый NSData из UIImage

Я могу создать UIImage из NSData, используя [UIImage imageWithData:] или [UIImage initWithData] метод.

Интересно, смогу ли я вернуть NSData из существующего UIImage? Что-то в строке NSData *myData = [myImage getData];

95 голосов | спросил eugene 7 Jpm1000000pmFri, 07 Jan 2011 12:01:55 +030011 2011, 12:01:55

5 ответов


0
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality

или

NSData *imageData = UIImagePNGRepresentation(image);

В зависимости от того, хотите ли вы, чтобы ваши данные были в формате PNG или JPG.

ответил Caroline 7 Jpm1000000pmFri, 07 Jan 2011 12:13:10 +030011 2011, 12:13:10
0

При инициализации объекта UIImage с помощью init(data: originalData), этот originalData будет преобразован в необработанные данные в каком-то внутреннем формате. Эти данные можно получить позже с помощью

let rawData = myImage.cgImage?.dataProvider?.data as Data?

Однако, поскольку rawData является необработанным, оно будет даже больше, чем при использовании UIImagePNGRepresentation

ответил yesleon 24 FebruaryEurope/MoscowbSat, 24 Feb 2018 04:24:40 +0300000000amSat, 24 Feb 2018 04:24:40 +030018 2018, 04:24:40
0

Можно ожидать, что UIImage - это объект, отформатированный для отображения, и поэтому он не будет использовать исходные данные (которые, вероятно, в формате PNG или JPEG), но, скорее, массив пикселей или какой-либо другой внутренний формат. Другими словами, UIImage(data: foo) не сохранит foo.

  1. Если вы просто хотите использовать его в другом месте вашей программы, оригинальный UIImage подойдет (я полагаю, это не совсем так)

  2. Если вы хотите сериализоваться, UIImagePNGRepresentation(...) будет работать, но будет больше, если оригинал был в формате JPEG; UIImageJPEGRepresentation(...) часто приводит к небольшому превышению размера данных и незначительным потерям, если исходный формат был PNG. Следует выбрать один из них в зависимости от способа отображения изображения и ожидаемого формата. Если вы используете PNG и хотите PNG, вы должны получить хороший размер файла и почти идентичные данные, за исключением специальных фрагментов PNG.

  3. Если вы хотите получить точную копию исходных данных (возможно, сохранить файл после миниатюры или сохранить его в SHA1), то вам нужно сохранить его отдельно. Вы можете сделать что-то вроде:

    var image:UIImage
    var imageData:NSData {
        didSet {
            image = UIImage(data: imageData)
        }
    }
    
ответил Jim Driscoll 6 MarpmSun, 06 Mar 2016 18:48:03 +03002016-03-06T18:48:03+03:0006 2016, 18:48:03
0

Просто потому, что я наткнулся на это, и мне нравится Swift :)

Вот быстрый перевод сообщения Каройлин.

var imageData = UIImagePNGRepresentation(image)

или

var imageData = UIImageJPEGRepresentation(image, 0.7) 
ответил nsij22 18 J0000006Europe/Moscow 2015, 06:22:09
0

С тех пор, как был дан вышеупомянутый ответ, ситуация изменилась, поскольку те, кто все еще ищет, разделяют озабоченность CipherCom: iOS 5 добавила свойство CIImage .

ответил Rafe 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 18 Sep 2013 12:04:59 +0400 2013, 12:04:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132