Ios 如何在不降低分辨率的情况下降低UIImage的质量?
我的图片上传限制为2MB。因此,如果用户试图上传大于2MB的图像,我希望在不降低分辨率的情况下减小其大小 我如何做到这一点?我尝试过类似的方法,但没有成功:Ios 如何在不降低分辨率的情况下降低UIImage的质量?,ios,swift,Ios,Swift,我的图片上传限制为2MB。因此,如果用户试图上传大于2MB的图像,我希望在不降低分辨率的情况下减小其大小 我如何做到这一点?我尝试过类似的方法,但没有成功: var fileSize = UIImageJPEGRepresentation(image, 1)!.length print("before File size:") print(fileSize) while fileSize > MyConstants.MAX_
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.1设置为1
,以降低图像的质量和大小
print(uiimagejpegresentation(image,1)!.length)
这一行再次将图像的质量、大小或分辨率提高到最大值(因为scale=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)")
}
我注意到了这一点,但当我用新的小mydata设置图像时,它是否也会变小?是的,它会变小。这是一个难题,因为您必须在满足您的实现的某个地方达成妥协。你可以探索Swift中等效的[UIImage imageWithData:scale:]方法。无论谁否决了投票,最好添加一个原因,而不是隐藏。更新没有添加任何新内容,与我在回答中所述的内容相同。你为什么使用while循环?可以使用if(),while循环将递归创建质量为0.75的图像,这与if条件不同
while fileSize > MyConstants.MAX_ATTACHMENT_SIZE{
let mydata = UIImageJPEGRepresentation(image, 0.75)
fileSize = mydata!.length
image = UIImage(data: mydata!)!
print("make smaller \(fileSize)")
}