Ios 向圆形图像添加边框
我一直在寻找许多堆栈溢出的帖子,但没有一篇能够给我提供我想要的解决方案。到目前为止,我已经能够得到一个图像,并转换成一个圆圈使用阿拉莫菲尔。然而,不幸的是,alamo fire没有提供向UIImage添加边框的选项。我想知道是否有人能解决我的问题。以下是我将图像做成圆形的代码:Ios 向圆形图像添加边框,ios,swift,google-maps,uiimage,Ios,Swift,Google Maps,Uiimage,我一直在寻找许多堆栈溢出的帖子,但没有一篇能够给我提供我想要的解决方案。到目前为止,我已经能够得到一个图像,并转换成一个圆圈使用阿拉莫菲尔。然而,不幸的是,alamo fire没有提供向UIImage添加边框的选项。我想知道是否有人能解决我的问题。以下是我将图像做成圆形的代码: if let downloadedImage = UIImage(data: data!) { let markerImage = downloadedImage let markerImageSize =
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
}
正如你们所看到的,我可以得到一个圆,但不能得到一个有边界的圆。到目前为止,我已经尝试了许多堆栈溢出post解决方案,尝试使用我的AlamoFire解决方案。以下是一些帖子:
以下是我目前拥有的:
以下是我想要的:
任何帮助都将不胜感激。谢谢 我建议您对包含UIImage的UIImageView应用所需的外观,如下所示:
imageView.layer.cornerRadius = imageView.frame.size.width / 2
imageView.layer.masksToBounds = true
imageView.layer.borderWidth = 2
imageView.layer.borderColor = UIColor.brown.cgColor
marker.iconView = imageView
更新:
由于您使用的是Google Maps(GMSMarker
),因此应该以编程方式创建UIImageView(将上面的代码片段应用于它),并将其添加到标记中,如下所示:
imageView.layer.cornerRadius = imageView.frame.size.width / 2
imageView.layer.masksToBounds = true
imageView.layer.borderWidth = 2
imageView.layer.borderColor = UIColor.brown.cgColor
marker.iconView = imageView
因此,它应该类似于:
// 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
这将创建带有白色边框的圆形图像
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()
}
}
然后
适用于那些为@ashley answer的obj-c版本而苦苦挣扎的人们。同样的逻辑
+(UIImage*)将边框绘制到图像:(UIImage*)带有颜色的图像:(UIColor*)颜色和厚度:(CGFloat)厚度{
CGFloat直径=最小值(image.size.width,image.size.height);
BOOL isLandscape=image.size.width>image.size.height;
CGFloat xOffset=isLandscape?(image.size.width-diameter)/2:0;
CGFloat yOffset=isLandscape?0:(image.size.height-diameter)/2;
CGSize imageSize=CGSizeMake(直径,直径);
UIGraphicsBeginImageContext(image.size);
UIBezierPath*ovalPath=[UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0,imageSize.width,imageSize.height)];
[ovalPath addClip];
[图像绘制点:CGPointMake(-xOffset,-yOffset)];
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(上下文,color.CGColor);
ovalPath.lineWidth=厚度;
[卵形行程];
UIImage*BordereImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsSendImageContext();
返回边界图像;
}
显示最终结果所需内容的图片。使尝试和帮助变得更容易?你想修改图像,还是只是在你的应用程序中渲染它?@DonMag我刚刚添加了一张我拥有的和我想要的图片。@Larme我只想将图像做成一个带边框的圆。只需设置你的UIImageView
的角半径和层。borderColor
是,我已经尝试过了,但问题是我无法将UIImageView添加到我的marker.icon值,因为该值必须是UIImage。是的,我使用的是谷歌地图,是的,我使用的是GMSMArkeView。我可以将UIImageView
添加到标记中,检查更新:)我尝试过这样做,但我现在正在处理这个错误:初始化之前使用了常量imageView非常感谢!!!长期以来,我们一直在寻找这样的解决方案。再次感谢你!我知道我要问的可能是显而易见的,但你能解释一下我将如何使用我的变量downloadeImage在我的代码中实现你的解决方案吗?这是一个阳光明媚的好天气,所以我更新了我的答案,但实际上,你需要自己尝试解决一些问题。