Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在不降低分辨率的情况下降低UIImage的质量?_Ios_Swift - Fatal编程技术网

Ios 如何在不降低分辨率的情况下降低UIImage的质量?

Ios 如何在不降低分辨率的情况下降低UIImage的质量?,ios,swift,Ios,Swift,我的图片上传限制为2MB。因此,如果用户试图上传大于2MB的图像,我希望在不降低分辨率的情况下减小其大小 我如何做到这一点?我尝试过类似的方法,但没有成功: var fileSize = UIImageJPEGRepresentation(image, 1)!.length print("before File size:") print(fileSize) while fileSize > MyConstants.MAX_

我的图片上传限制为2MB。因此,如果用户试图上传大于2MB的图像,我希望在不降低分辨率的情况下减小其大小

我如何做到这一点?我尝试过类似的方法,但没有成功:

        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)")
        }