为圆形 UIImage 添加边框

Roh*_*hth 3 google-maps uiimage ios swift

我一直在查看许多堆栈溢出的帖子,但没有一个能够给我我想要的解决方案。到目前为止,我已经能够使用 AlamoFire 获取图像并将其转换为圆形。但是,不幸的是,alamo fire 没有提供向 UIImage 添加边框的选项。我想知道是否有人可以解决我的问题。这是我将图像制作成圆形的代码:

if let downloadedImage = UIImage(data: data!) {

   let markerImage = downloadedImage
   let markerImageSize = CGSize(width: 50, height: 50)
   let markerImageFilter = AspectScaledToFillSizeCircleFilter(size: markerImageSize)

   let finalMarkerImage = markerImageFilter.filter(markerImage)

   marker.icon = finalMarkerImage
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我能够得到一个圆圈,但不能得到一个带边框的圆圈。到目前为止,我已经尝试了许多堆栈溢出后期解决方案来尝试使用我的 AlamoFire 解决方案。以下是一些帖子: 将 UIImage 制作成圆形

将 UIImage 切割成圆形 Swift(iOS)

这是我目前拥有的:

在此处输入图片说明

这是我想要的:

在此处输入图片说明

任何帮助将非常感激。谢谢!

Ahm*_*d F 5

我建议您应该将所需的外观应用于包含您的 UIImage的UIImageView,如下所示:

imageView.layer.cornerRadius = imageView.frame.size.width / 2
imageView.layer.masksToBounds = true
imageView.layer.borderWidth = 2
imageView.layer.borderColor = UIColor.brown.cgColor
Run Code Online (Sandbox Code Playgroud)

更新:

由于您正在使用 Google Maps ( GMSMarker),您应该以编程方式创建一个 UIImageView(将上面的代码片段应用于它)并将其添加到您的标记中iconView,如下所示:

marker.iconView = imageView
Run Code Online (Sandbox Code Playgroud)

所以,它应该类似于:

// of course the values of the width/height (size) is up to you
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
imageView.layer.cornerRadius = imageView.frame.size.width / 2
imageView.layer.masksToBounds = true
imageView.layer.borderWidth = 2
imageView.layer.borderColor = UIColor.white.cgColor

// set your image
imageView.image = ...

marker.iconView = imageView
Run Code Online (Sandbox Code Playgroud)


Ash*_*lls 5

这应该创建带有白色边框的圆形图像......

func round(image: UIImage) -> UIImage {
    let imageWidth = image.size.width
    let imageHeight = image.size.height

    let diameter = min(imageWidth, imageHeight)
    let isLandscape = imageWidth > imageHeight

    let xOffset = isLandscape ? (imageWidth - diameter) / 2 : 0
    let yOffset = isLandscape ? 0 : (imageHeight - diameter) / 2

    let imageSize = CGSize(width: diameter, height: diameter)

    return UIGraphicsImageRenderer(size: imageSize).image { _ in

        let ovalPath = UIBezierPath(ovalIn: CGRect(origin: .zero, size: imageSize))
        ovalPath.addClip()
        image.draw(at: CGPoint(x: -xOffset, y: -yOffset))
        UIColor.white.setStroke()
        ovalPath.lineWidth = diameter / 50
        ovalPath.stroke()
    }
}
Run Code Online (Sandbox Code Playgroud)

然后

let roundImage = round(image: downloadedImage)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 这是一个阳光明媚的好日子,所以我更新了我的答案,但实际上,您需要尝试自己解决一些问题。 (4认同)