Swift 3如何在隐藏帧上缩放图像

时间:2017-03-21 13:45:44

标签: swift3 uiimageview

我在圈子里面有照片:

Good circle. Image

当我从数据库中检索图像时,它看起来像这样:

Bad circle. image

我刚上传到数据库时调整了图像大小。

我想要的是在圆圈内显示完整的图像,比如将图像缩放为圆形。

这里使用了一些代码:

我使用此代码在上传到数据库之前调整图像大小。

// Resize image
func resized(withPercentage percentage: CGFloat) -> UIImage? {
    let canvasSize = CGSize(width: size.width * percentage, height: size.height * percentage)
    UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale)
    defer { UIGraphicsEndImageContext() }
    draw(in: CGRect(origin: .zero, size: canvasSize))
    return UIGraphicsGetImageFromCurrentImageContext()
}
func resized(toWidth width: CGFloat) -> UIImage? {
    let canvasSize = CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))
    UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale)
    defer { UIGraphicsEndImageContext() }
    draw(in: CGRect(origin: .zero, size: canvasSize))
    return UIGraphicsGetImageFromCurrentImageContext()
}

我使用此代码制作图像圈

func setRounded() {
    let radius = self.frame.width / 2
    self.layer.cornerRadius = radius
    self.layer.masksToBounds = true
}

此代码用于在上传到数据库之前调整图像大小:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {



        let myThumb2 = image.resized(toWidth: 300)
       //image.resized(toHeight: 300) how to set this height?


        self.profilepic.image = myThumb2

2 个答案:

答案 0 :(得分:0)

看起来你的UIImageView比它所在的视图大。

要解决此问题,您可以调整UIImageView的大小以适应视图,或者在包含UIImageView的视图上将clipToBounds设置为false。

快速编辑:如果您的图像已经四舍五入并且不是圆形的UIImageView(无法从屏幕截图中看出),可以通过将UIImageView的内容模式更改为Aspect Fit来解决此问题

答案 1 :(得分:0)

目前,您似乎已将其设置为Aspect Fit - 这会为其提供"信箱"效果(顶部和底部的空白区域)。

编辑:要修复您的绘图问题,您可以添加"调整大小到高度" FUNC ...

// Resize image
func resized(toHeight height: CGFloat) -> UIImage? {
    let canvasSize = CGSize(width: size.width * height / size.height, height: height)
    UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale)
    defer { UIGraphicsEndImageContext() }
    draw(in: CGRect(origin: .zero, size: canvasSize))
    return UIGraphicsGetImageFromCurrentImageContext()
}

并且,因为你的"目标"图片框架为方框,选择是致电toWidth还是toHeight

// init, but will be replaced below
var finalImage: UIImage = UIImage()

var finalImageSize: CGFloat = 200.0

var w = myImg.size.width
var h = myImg.size.height

if w > h {
    finalImage = myImg.resized(toHeight: finalImageSize)!
} else {
    finalImage = myImg.resized(toWidth: finalImageSize)!
}

确保您的目标UIImageView也设置为:

imgView.contentMode = .center
imgView.clipsToBounds = true

一旦你看到发生了什么,我确定你可以压缩它(例如创建一个resized(toFit:)函数)并添加任何必要的错误检查:)

另一个编辑: ... 第二个选项

当然,毕竟,你正在做很多UIImageView可以为你做的事情。例如:

// car.png is 750x400 pixels
let newImage = UIImage(named: "car.png")
let newImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
newImageView.image = newImage
newImageView.contentMode = .scaleAspectFill
newImageView.layer.cornerRadius = newImageView.frame.width / 2
newImageView.layer.masksToBounds = true

产地:

enter image description here