У мене обмеження для завантаження в 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)