我一直试图将图像缩小到较小的尺寸一段时间,并且无法弄清楚为什么它会失去质量,即使我遇到教程说它不应该。首先,我将图像裁剪成正方形,然后使用此代码:
let newRect = CGRectIntegral(CGRectMake(0,0, newSize.width, newSize.height))
let imageRef = image.CGImage
UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
let context = UIGraphicsGetCurrentContext()
// Set the quality level to use when rescaling
CGContextSetInterpolationQuality(context, CGInterpolationQuality.High)
let flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, newSize.height)
CGContextConcatCTM(context, flipVertical)
// Draw into the context; this scales the image
CGContextDrawImage(context, newRect, imageRef)
let newImageRef = CGBitmapContextCreateImage(context)! as CGImage
let newImage = UIImage(CGImage: newImageRef)
// Get the resized image from the context and a UIImage
UIGraphicsEndImageContext()
我也试过这个代码的结果相同:
let newSize:CGSize = CGSize(width: 30,` height: 30)
let rect = CGRectMake(0, 0, newSize.width, newSize.height)
UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
UIBezierPath(
roundedRect: rect,
cornerRadius: 2
).addClip()
image.drawInRect(rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let imageData = UIImageJPEGRepresentation(newImage, 1.0)
sharedInstance.my.append(UIImage(data: imageData!)!)
调整大小后,我仍然会看到模糊的图像。我将它与我有一个图像视图并将其设置为纵横填充/拟合时进行比较,图像更清晰,更小。这就是我想要的品质,无法弄清楚我错过了什么。我在这里放了两张照片,第一张是使用imageView的更清晰的图像,第二张是用我的代码调整大小的图片。如何在图像视图中操作图像看起来清晰?
答案 0 :(得分:2)
你应该使用
let newSize:CGSize = CGSize(width: 30 * UIScreen.mainScreen().scale, height: 30 * UIScreen.mainScreen().scale)
这是因为不同的iPhone有不同的尺寸。
答案 1 :(得分:1)
选择图片视图,点击"尺寸"检查员并更改" X", " Y","宽度"和"身高"属性。
X = 14
Y = 10
Width = 60
Height = 60
对于圆形半径,您可以实现此代码:
cell.ImageView.layer.cornerRadius = 30.0
cell.ImageView.clipsToBounds = true
或
转到Identity检查器,单击左下角的Add按钮(+)
用户定义的运行时属性编辑器。
双击新属性的“密钥路径”字段,将属性的密钥路径编辑为layer.cornerRadius
将类型设置为Number
和
30
的值。要从方形图像制作圆形图像,
radius设置为图像视图宽度的一半。
Duncan给你一个很好的解释30到30太小了,为什么像素或图像的质量都会丢失,我建议你使用60乘60
答案 2 :(得分:0)
在您显示的示例图像中,您绘制的“后”图像大于起始图像。如果将图像从较大的尺寸缩小到30像素×30像素,则会丢弃大量信息。如果你然后以更大的尺寸绘制30x30图像,它会看起来很糟糕。 30乘30是一个很小的图像,没有太多的细节。