使用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
核心形象
现在该探索图像调整大小的新技术了。
希望你喜欢。