这是我的目的,我的图像宽度为750,我想将其缩放到128 然后我发现了一个名为UIImage的init方法 init(data:scale:)
接下来是我的代码
func scaleImage(image:UIImage, ToSpecificWidth targetWidth:Int) -> UIImage{
var scale = Double(targetWidth) / Double(image.size.width)
let scaledImage = UIImage(data: UIImagePNGRepresentation(image)! as Data, scale: CGFloat(scale))
return scaledImage!
}
print("originImageBeforeWidth: \(portrait?.size.width)") // output: 750
let newImage = Tools.scaleImage(image: portrait!, ToSpecificWidth: 128) // the scale is about 0.17
print("newImageWidth: \(newImage.size.width)") // output: 4394.53125
显然新宽度离我的意图太远了
我正在寻找750 * 0.17 = 128
但我得到750 / 0.17 = 4394
然后我改变了我的scaleImage函数 这是更新的代码
func scaleImage(image:UIImage, ToSpecificWidth targetWidth:Int) -> UIImage{
var scale = Double(targetWidth) / Double(image.size.width)
scale = 1/scale // new added
let scaledImage = UIImage(data: UIImagePNGRepresentation(image)! as Data, scale: CGFloat(scale))
return scaledImage!
}
print("originImageBeforeWidth: \(portrait?.size.width)") // output: 750
let newImage = Tools.scaleImage(image: portrait!, ToSpecificWidth: 128) // the scale is about 5.88
print("newImageWidth: \(newImage.size.width)") // output: 128
这正是我想要的,但代码比例= 1 /比例没有任何意义
这里发生了什么?
答案 0 :(得分:1)
您尝试使用的init
方法不是为了调整图像大小。并且scale
参数不是调整大小的比例。它是1x,2x,3x比例。从本质上讲,scale
的唯一有效值目前是1.0,2.0或3.0。
将scale
设置为您预期的倒数会给您一个size
属性,返回您想要的结果,但它根本不是您应该做的。
有适当的方法可以调整图像的大小,例如How to Resize image in Swift?以及其他图像。
答案 1 :(得分:0)
根据苹果文件,
UIImage.scale
解释图像数据时要采用的比例因子。应用比例因子1.0会导致图像的大小与图像的基于像素的尺寸相匹配。应用不同的比例因子会更改size属性报告的图像大小。
UIImage.size
此值反映图像的逻辑大小,并考虑图像的当前方向。将size值乘以scale属性中的值,以获取图像的像素尺寸。
所以,
实际像素大小=尺寸*比例
这就是你需要设置1 / scale的原因。
顺便说一下,
scale只能正确影响UIImage的大小值
这意味着它只会影响屏幕显示的大小,而不会改变像素大小
如果要调整大小,可以使用缩放和使用进行绘制
的 UIGraphicsGetImageFromCurrentImageContext()强>