美文网首页
iOS 高斯模糊

iOS 高斯模糊

作者: gaookey | 来源:发表于2020-06-24 18:58 被阅读0次
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
}

相关文章

网友评论

      本文标题:iOS 高斯模糊

      本文链接:https://www.haomeiwen.com/subject/hjldfktx.html