2016-07-27 5 views
2

У меня есть ограничение на загрузку 2 МБ с моими изображениями. Поэтому, если пользователь пытается загрузить изображение размером более 2 МБ, я хотел бы уменьшить его размер, не уменьшая разрешение.Как уменьшить качество UIImage без уменьшения разрешения?

Как это достичь? Я пытался что-то вроде этого, но это не сработало:

 var fileSize = UIImageJPEGRepresentation(image, 1)!.length 
     print("before File size:") 
     print(fileSize) 

     while fileSize > MyConstants.MAX_ATTACHMENT_SIZE{ 

      let mydata = UIImageJPEGRepresentation(image, 0.75) 
      fileSize = mydata!.length 
      image = UIImage(data: mydata!)! 

      print("make smaller \(fileSize)") 
     } 

     print("after File size:") 
     print(UIImageJPEGRepresentation(image, 1)!.length) 

выход:

before File size: 
2298429 
make smaller 846683 
after File size: 
2737491 
+0

Почему вы использовали цикл while? Вы можете использовать if() –

+0

, тогда цикл while будет рекурсивно создавать изображение с качеством в 0,75 в отличие от условия if – akdsouza

ответ

-1
let mydata = UIImageJPEGRepresentation(image, 0.75) 
     fileSize = mydata!.length 
     image = UIImage(data: mydata!)! 

Это правильный подход. Вы можете установить разную шкалу от 0.1 to 1, что вы хотите уменьшить качество и размер изображения.

print(UIImageJPEGRepresentation(image, 1)!.length) эта линия снова увеличить изображения в качестве и размер или разрешение на максимальный (because scale = 1)

+0

, обновление не добавляет ничего нового, это то же самое, что и в моем ответе. – akdsouza

-1

Как @Lion сказал, вам придется играть с качеством для достижения приятного размера файла. Я заметил, однако, что:

print(UIImageJPEGRepresentation(image, 1)!.length) 

Распечатайте длину изображения при максимальном качестве. Это вводит в заблуждение, так как внутри условия while вы достигаете меньшего размера файла.

while fileSize > MyConstants.MAX_ATTACHMENT_SIZE{ 

      let mydata = UIImageJPEGRepresentation(image, 0.75) 
      fileSize = mydata!.length 
      image = UIImage(data: mydata!)! 

      print("make smaller \(fileSize)") 
     } 
+0

Я замечаю это, но когда я задаю образ с новыми маленькими mydata, не будет ли он меньше? –

+0

Да, это будет так. Его уловка 22, так как вам придется достичь компромисса где-нибудь, что удовлетворяет вашей реализации. Вы можете изучить эквивалентный метод [UIImage imageWithData: scale:] в Swift. – akdsouza

+0

Кто бы ни проголосовал, было бы неплохо добавить причину, чем скрыть, а? – akdsouza

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