func blurImage(_ image: UIImage) -> UIImage {
//设置图片模糊效果半径
let blurRadix: UInt32 = 7
let img = image.cgImage!
let bitmapData = img.dataProvider?.data
//import Accelerate
var inputBuffer = vImage_Buffer()
//获取图片的data数据内容、width、height、每行字节数
inputBuffer.data = UnsafeMutableRawPointer(mutating: CFDataGetBytePtr(bitmapData))
inputBuffer.width = vImagePixelCount(bitPattern: (img.width))
inputBuffer.height = vImagePixelCount(bitPattern: (img.height))
inputBuffer.rowBytes = img.bytesPerRow
//构建一片空间大小和原始图片所占空间相同大小的数据空间
let pixelBuffer = malloc(img.bytesPerRow * img.height)
var outputBuffer = vImage_Buffer()
outputBuffer.data = pixelBuffer
outputBuffer.width = vImagePixelCount(bitPattern: (img.width))
outputBuffer.height = vImagePixelCount(bitPattern: (img.height))
outputBuffer.rowBytes = img.bytesPerRow
//生成模糊效果的图片
vImageBoxConvolve_ARGB8888(&inputBuffer, &outputBuffer, nil, 0, 0, blurRadix, blurRadix, nil, vImage_Flags(kvImageEdgeExtend))
//构建RGB模糊空间
let colorSpace = CGColorSpaceCreateDeviceRGB()
let w = outputBuffer.width
let h = outputBuffer.height
let ctx = CGContext(data: outputBuffer.data, width: Int(w), height: Int(h), bitsPerComponent: 8, bytesPerRow: outputBuffer.rowBytes, space: colorSpace, bitmapInfo: (image.cgImage?.bitmapInfo.rawValue)!)
let imageRef = ctx?.makeImage()
let newImage = UIImage(cgImage: imageRef!)
free(pixelBuffer)
return newImage
}
网友评论