Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.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/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
Ios 设置半径和大小时,为什么图像质量下降?_Ios_Swift_Xcode_Swift3_Uiimage - Fatal编程技术网

Ios 设置半径和大小时,为什么图像质量下降?

Ios 设置半径和大小时,为什么图像质量下降?,ios,swift,xcode,swift3,uiimage,Ios,Swift,Xcode,Swift3,Uiimage,我在UIImage扩展中使用以下方法来使用URL中的图像并将其显示为UIBarButtonim。但是,当我使用以下方法调整角半径和大小时,图像的质量会明显变差。需要进行哪些更改以防止其质量下降 extension UIImage { public func withRoundedCornersAndSetSize(radius: CGFloat? = nil, size: CGSize) -> UIImage? { let maxRadius = min(size

我在UIImage扩展中使用以下方法来使用URL中的图像并将其显示为UIBarButtonim。但是,当我使用以下方法调整角半径和大小时,图像的质量会明显变差。需要进行哪些更改以防止其质量下降

extension UIImage {

    public func withRoundedCornersAndSetSize(radius: CGFloat? = nil, size: CGSize) -> UIImage? {
        let maxRadius = min(size.width, size.height) / 2
        let cornerRadius: CGFloat
        if let radius = radius, radius > 0 && radius <= maxRadius {
            cornerRadius = radius
        } else {
            cornerRadius = maxRadius
        }
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        let rect = CGRect(origin: .zero, size: size)
        UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius).addClip()
        draw(in: rect)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}
扩展UIImage{ 带圆角的公共函数和设置大小(半径:CGFloat?=nil,大小:CGSize)->UIImage{ 设maxRadius=min(尺寸.宽度,尺寸.高度)/2 让转弯半径:CGFloat
如果让radius=radius,radius>0&&radius我发现我可以在下面的代码中使用
resize()
方法调整UIImage的大小,而不会降低质量。然后,我在最初询问的
withRoundedCornersAndSetSize()方法中使用了这个方法

extension UIImage {
   func withRoundedCornersAndSetSize(radius: CGFloat? = nil, targetSize: CGSize) -> UIImage? {
        let resizedImage = self.resize(targetSize: targetSize)
        
        let maxRadius = min(resizedImage.size.width, resizedImage.size.height) / 2
        let cornerRadius: CGFloat
        if let radius = radius, radius > 0 && radius <= maxRadius {
            cornerRadius = radius
        } else {
            cornerRadius = maxRadius
        }

        UIGraphicsBeginImageContextWithOptions(resizedImage.size, false, resizedImage.scale)
        let rect = CGRect(origin: .zero, size: resizedImage.size)
        UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius).addClip()
        draw(in: rect)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!
    }
    
    func resize(targetSize: CGSize) -> UIImage {
        return UIGraphicsImageRenderer(size:targetSize).image { _ in
            self.draw(in: CGRect(origin: .zero, size: targetSize))
        }
    }
}
扩展UIImage{ func withRoundedCornersAndSetSize(半径:CGFloat?=nil,目标大小:CGSize)->UIImage{ 让resizedImage=self.resize(targetSize:targetSize) 设maxRadius=min(resizedImage.size.width、resizedImage.size.height)/2 让转弯半径:CGFloat 如果让半径=半径,半径>0&&radius UIImage{ 返回UIGraphicsImageRenderer(大小:targetSize)。图像{uUin self.draw(in:CGRect(原点:.zero,大小:targetSize)) } } }
什么是
比例
?错误的比例会降低质量。在这个矩形中绘制图像时,您是否在增大/缩小图像?非常大的图像变得非常小,显然会丢失大量像素清晰度。这是UIImage extension@matt的特性