/ / Як зменшити якість UIImage, не зменшуючи роздільну здатність? - ios, стрімкий

Як зменшити якість UIImage без зменшення роздільної здатності? - іос, швидкий

У мене обмеження для завантаження в 2 МБ із зображеннями. Отже, якщо користувач намагається завантажити зображення розміром більше 2 Мб, я хотів би зменшити його розмір, не зменшуючи роздільну здатність.

Як я цього досягти? Я спробував щось подібне, але нічого не вийшло:

        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

Відповіді:

-1 для відповіді № 1

Як сказав @Lion, вам доведеться пограти з якістю, щоб досягти приємного розміру файлу. Однак я помітив, що:

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

Буде друкувати довжину зображення з максимальною якістю. Це вводить в оману, оскільки всередині умови час ви досягаєте меншого розміру файлу.

while fileSize > MyConstants.MAX_ATTACHMENT_SIZE{

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

print("make smaller (fileSize)")
}

-1 для відповіді № 2
  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)