如何在不降低分辨率的情况下降低UIImage的质量?
问题描述:
我的图片上传限制为2 MB。因此,如果用户尝试上传大于2 MB的图像,我想在不降低分辨率的情况下减小尺寸。如何在不降低分辨率的情况下降低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
答
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
答
正如@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)")
}
为什么使用while循环?你可以使用if() –
while循环将以0.75的质量递归地创建一个图像,而不像if条件 – akdsouza