UIImageJpgRepresentation 使图像分辨率加倍
UIImageJpgRepresentation doubles image resolution
我正在尝试将来自 iPhone 相机的图像保存到文件中。我使用以下代码:
try UIImageJPEGRepresentation(toWrite, 0.8)?.write(to: tempURL, options: NSData.WritingOptions.atomicWrite)
这导致文件的分辨率是 toWrite UIImage 的两倍。我在 watch 表达式中确认从 UIImageJPEGRepresentation 创建一个新的 UIImage 会使它的分辨率加倍
-> toWrite.size CGSize (width = 3264, height = 2448)
-> UIImage(data: UIImageJPEGRepresentation(toWrite, 0.8)).size CGSize? (width = 6528, height = 4896)
知道为什么会发生这种情况,以及如何避免这种情况?
谢谢
您的初始图像的比例因子 = 2,但是当您从数据初始化图像时,您将获得比例因子 = 1 的图像。您解决它的方法是控制比例并使用比例初始化图像 属性:
@available(iOS 6.0, *)
public init?(data: Data, scale: CGFloat)
表示您可以设置比例的方式的游乐场代码
extension UIImage {
class func with(color: UIColor, size: CGSize) -> UIImage? {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(size, true, 2.0)
guard let context = UIGraphicsGetCurrentContext() else { return nil }
context.setFillColor(color.cgColor)
context.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
let image = UIImage.with(color: UIColor.orange, size: CGSize(width: 100, height: 100))
if let image = image {
let scale = image.scale
if let data = UIImageJPEGRepresentation(image, 0.8) {
if let newImage = UIImage(data: data, scale: scale) {
debugPrint(newImage?.size)
}
}
}
我正在尝试将来自 iPhone 相机的图像保存到文件中。我使用以下代码:
try UIImageJPEGRepresentation(toWrite, 0.8)?.write(to: tempURL, options: NSData.WritingOptions.atomicWrite)
这导致文件的分辨率是 toWrite UIImage 的两倍。我在 watch 表达式中确认从 UIImageJPEGRepresentation 创建一个新的 UIImage 会使它的分辨率加倍
-> toWrite.size CGSize (width = 3264, height = 2448)
-> UIImage(data: UIImageJPEGRepresentation(toWrite, 0.8)).size CGSize? (width = 6528, height = 4896)
知道为什么会发生这种情况,以及如何避免这种情况?
谢谢
您的初始图像的比例因子 = 2,但是当您从数据初始化图像时,您将获得比例因子 = 1 的图像。您解决它的方法是控制比例并使用比例初始化图像 属性:
@available(iOS 6.0, *)
public init?(data: Data, scale: CGFloat)
表示您可以设置比例的方式的游乐场代码
extension UIImage {
class func with(color: UIColor, size: CGSize) -> UIImage? {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(size, true, 2.0)
guard let context = UIGraphicsGetCurrentContext() else { return nil }
context.setFillColor(color.cgColor)
context.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
let image = UIImage.with(color: UIColor.orange, size: CGSize(width: 100, height: 100))
if let image = image {
let scale = image.scale
if let data = UIImageJPEGRepresentation(image, 0.8) {
if let newImage = UIImage(data: data, scale: scale) {
debugPrint(newImage?.size)
}
}
}