2016-09-09 2 views
1

Я делаю простую задачу уменьшения размера файла изображения, но получил эту проблему. При использовании опции «Без потерь» для JPEG-файлов размер файла утроился, а затем исходные NSData для изображения (такое же разрешение). Любое предложение?NSData to UIImage назад к NSData размер полученной длины втрое

Вот простой код:

let data = someImageData 
print(data.length) 
let image = UIImage(data: data)! 
let newImageData = UIImageJPEGRepresentation(image, 1) 
print(newImageData.length) 
let newImageData = UIImageJPEGRepresentation(image, 0.8) 
print(newImageData.length) 

и выход:

2604768 //original length 
8112955 //new length if compression = 1 
2588870 //new length if compression = 0.8 

Кажется, я должен принять потерю 0,8 качества, чтобы получить такую ​​же длину данных. Я что-то пропустил? Помогите пожалуйста.

Редактирование: я сделал еще несколько тестов, преобразовывая данные в UIImage, а затем в UIImageJPEGRepresentation (изображение, 1) размер длины новых данных увеличивается с каждым циклом. Но если я использую UIImageJPEGRepresentation (изображение, 0,8), размер длины новых данных немного уменьшается (очень мало), однако составная потеря должна быть проблемой.

+0

Я сделал некоторые поиск снова и нашел этот вопрос на так: http://stackoverflow.com/questions/11500396/converting-uiimage-to-nsdata-with- uiimagejpegrepresentaion-and-saving-it-to-a? rq = 1 Однако он еще не решен даже после более чем четырех лет ... – JDG

ответ

2

Что ваш код делает, распаковку/извлечения изображения в память с линией ->let image = UIImage(data: data)! , а затем пересжатие в формате JPEG, с let newImageData = UIImageJPEGRepresentation(image, 1) с самым высоким соотношением качества (q=1.0). Вот почему изображение внезапно становится таким большим.

Итак, как только вы получите свое изображение как UIImage из NSData, декомпрессия/преобразование изменяет размер изображения.

размер файла изображения будет на самом деле 8112955.

+0

Данные взяты из файла изображения (полученного через PHImageManager.defaultManager(). requestImageDataForAsset) и его Размер файла фактически близок к 2604768 – JDG

Смежные вопросы