Ios 对UIImage感到困惑';Swift 3.0中的s init(数据:scale:)方法
这是我的目的,我有一个750的图像宽度,我想扩大到128 然后我找到了UIImage的一个init方法,名为 接下来是我的代码Ios 对UIImage感到困惑';Swift 3.0中的s init(数据:scale:)方法,ios,swift,uiimage,Ios,Swift,Uiimage,这是我的目的,我有一个750的图像宽度,我想扩大到128 然后我找到了UIImage的一个init方法,名为 接下来是我的代码 func scaleImage(image:UIImage, ToSpecificWidth targetWidth:Int) -> UIImage{ var scale = Double(targetWidth) / Double(image.size.width) let scaledImage = UIImage(data
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/比例没有任何意义
这里发生了什么?您尝试使用的
init
方法不是为了调整图像大小。而且比例
参数不是调整比例。这是1倍,2倍,3倍的刻度。本质上,scale
的唯一有效值当前为1.0、2.0或3.0
将比例
设置为与预期相反的值时,会得到返回所需结果的大小
属性,但这根本不是您应该做的
有适当的方法可以调整图像的大小,比如其他图像。根据苹果的文档
解释图像数据时要采用的比例因子。应用比例因子1.0会生成大小与基于像素的图像尺寸匹配的图像。应用不同的比例因子会更改“大小”属性报告的图像大小
此值反映图像的逻辑大小,并考虑图像的当前方向。将“大小”值乘以“缩放”属性中的值,以获得图像的像素尺寸 所以,
实际像素大小=大小*比例 这就是为什么需要设置1/比例 顺便说一下,
缩放只会正确影响UIImage的大小值。
这意味着它只影响屏幕上显示的大小,而不改变像素大小。
如果要调整大小,可以按比例绘制并使用 UIGraphicsGetImageFromCurrentImageContext()