我在圈子里面有照片:
当我从数据库中检索图像时,它看起来像这样:
我刚上传到数据库时调整了图像大小。
我想要的是在圆圈内显示完整的图像,比如将图像缩放为圆形。
这里使用了一些代码:
我使用此代码在上传到数据库之前调整图像大小。
// 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
答案 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
产地: