我正在构建一个自定义图像键盘,但是在调整图像大小时遇到了问题。我尝试过多种不同的方法,但都没有成功。问题在于,图像要么比我想要的大,要么如果将其调整为我的目标大小的一半,则比原始图像更模糊。在下面的示例中,我试图将图像调整为与屏幕上显示的大小相同(请参见帖子底部的截图)。以下是我的调整大小代码:
println("Starting Size is \(image!.size)")
println("New Size is: \(sender.frame.size))")
println("Initial Scale: \(image!.scale)")
image = imageResize(image!, size: CGSize(width: sender.frame.width, height: sender.frame.height))
println("Final Size is \(image!.size)")
println("Final Scale: \(image!.scale)")
以下是上述打印语句的控制台输出结果:
Starting Size is (750.0, 750.0)
New Size is: (78.0, 78.0))
Initial Scale: 1.0
Final Size is (78.0, 78.0)
Final Scale: 2.0
这里是
imageResize
函数。func imageResize(image:UIImage, size:CGSize)-> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
var context = UIGraphicsGetCurrentContext()
CGContextSetInterpolationQuality(context, kCGInterpolationHigh)
image.drawInRect(CGRect(origin: CGPointZero, size: size))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
最后,这是截图:
更新:
为了澄清,屏幕截图底部的图片来自键盘。它是一个带有完整尺寸(750x750)图像的UIButton。当我将该图像复制到剪贴板时,我从完整尺寸图像开始,并将其缩小以匹配键盘中UIButton的框架。因此,我正在尝试使文本消息中的图像具有与键盘中的图像相同的大小和清晰度。
更新#2
我更新了我的图像调整函数,以根据屏幕比例调整图像大小:
func imageResize(image:UIImage, size:CGSize)-> UIImage {
let scale = UIScreen.mainScreen().scale
let newSize = CGSize(width: size.width / scale, height: size.height / scale)
UIGraphicsBeginImageContextWithOptions(newSize, false, scale)
var context = UIGraphicsGetCurrentContext()
CGContextSetInterpolationQuality(context, kCGInterpolationHigh)
image.drawInRect(CGRect(origin: CGPointZero, size: newSize))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
以下是控制台输出的有关图像的详细信息:
Starting Size is (750.0, 750.0)
New Size is: (78.0, 78.0))
Initial Scale: 1.0
Final Size is (39.0, 39.0)
Final Scale: 2.0
最后,在设备上(iPhone 6)图像的外观如下所示: 可以看到,虽然图像具有正确的框架,但与键盘中的UIButton相比,它显得模糊。在两种情况下,我都应该能够实现与UIButton相同的分辨率,因为我始终使用完整大小的图像。你认为我失去分辨率的原因是什么?
更新#3:
我更新了我的代码,将图像乘以比例而不是除以比例。
let newSize = CGSize(width: size.width * scale, height: size.height * scale)
以下是结果:
Starting Size is (750.0, 750.0)
New Size is: (78.0, 78.0))
Initial Scale: 1.0
Final Size is (156.0, 156.0)
Final Scale: 2.0
我很感激你的帮助,但我仍然不明白如何将所有内容整合在一起以获得正确大小的照片。为了完全澄清我的目标,我试图使复制到消息中的图像与键盘中的UIButton中的图像完全相同。这是我用于将图像添加到剪贴板以将其复制到消息文本中的代码。剪贴板代码在调整图像大小后运行:
pb.setData(UIImagePNGRepresentation(image), forPasteboardType: type)
setImage(image, forState: .Normal)
函数。对于消息字段,在使用pb.setData(UIImagePNGRepresentation(image), forPasteboardType: type)
将图像添加到剪贴板后,我通过按住文本框并在提示出现时按下粘贴按钮将图像粘贴到消息中。 - mgeno