使用Swift 4调整图像大小

如何在iOS中调整图片大小?

将照片调整为新的UIImage的大小:为什么要阅读此新博客?

由于存在许多博客,并且使用UIKit,CoreGraphics和CoreImage框架提供了许多示例代码。 大多数iOS开发人员都已经看到了该代码,并且可以在他们的项目中使用该代码,但是只有一些开发人员能够发现图像质量随所有这些框架而变化

让我们探索一种以更好的图片质量调整图像大小的新方法,您准备好了吗?

让我们使用Accelerate框架。

影像

使用CPU的矢量处理器处理大图像。 广泛的图像处理功能,包括Core Graphics和Core Video互操作,格式转换和图像处理。

 进口加速 
扩展程序UIImage {
  func resizeImageUsingVImage(size:CGSize)-> UIImage?  { 
让cgImage = self.cgImage!
var format = vImage_CGImageFormat(bitsPerComponent:8,bitsPerPixel:32,colorSpace:nil,bitmapInfo:CGBitmapInfo(rawValue:CGImageAlphaInfo.first.rawValue),版本:0,解码:nil,renderingIntent:CGColorRenderingIntent.defaultIntent)
var sourceBuffer = vImage_Buffer()
推迟{
免费(sourceBuffer.data)
}
var错误= vImageBuffer_InitWithCGImage(&sourceBuffer,&format,nil,cgImage,numericalCast(kvImageNoFlags))
保护错误== kvImageNoError else {return nil}
  //创建目标缓冲区 
令scale = self.scale
让destWidth = Int(size.width)
让destHeight = Int(size.height)
让bytesPerPixel = self.cgImage!.bitsPerPixel / 8
让destBytesPerRow = destWidth * bytesPerPixel
让destData = UnsafeMutablePointer .allocate(容量:destHeight * destBytesPerRow)
推迟{
destData.deallocate(容量:destHeight * destBytesPerRow)
}
var destBuffer = vImage_Buffer(数据:destData,高度:vImagePixelCount(destHeight),宽度:vImagePixelCount(destWidth),rowBytes:destBytesPerRow)
  //缩放图像 
错误= vImageScale_ARGB8888(&sourceBuffer,&destBuffer,nil,numericCast(kvImageHighQualityResampling))
 保护错误== kvImageNoError else {return nil} 
  //从vImage_Buffer创建CGImage 
var destCGImage = vImageCreateCGImageFromBuffer(&destBuffer,&format,nil,nil,numericCast(kvImageNoFlags),&error)?. takeRetainedValue()
 保护错误== kvImageNoError else {return nil} 
  //创建一个UIImage 
 让resizeImage = destCGImage.flatMap {UIImage(cgImage:$ 0,比例尺:0.0,方向:self.imageOrientation)} 
  destCGImage = nil 
 返回resizedImage 
  } 
}

这个不受欢迎或文献记录不多的小框架非常有力。 结果是惊人的。 这样可以产生最佳效果,并具有完美清晰和平衡的图像。 与CG相比,模糊程度更低。 比CG锐利。 不像CI那样不自然。
不相信,请尝试使用您现有的代码,并确保您正在放大图像并制作缩略图。您一定会看到不同的地方!

这是苹果官方文档的报价

Lanczos重采样方法通常比线性插值等更简单的方法产生更好看的结果。 但是,Lanczos方法可能会在高频信号区域(例如线条)附近产生振铃效果。

您可能在项目中使用下面提到的类似类型的代码,这些代码可以直接用此方法替换,并检查图像的性能和质量。

核心图片:

UIKit

核心形象

现在该探索图像调整大小的新技术了。

希望你喜欢。

Interesting Posts