You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.blur(radius:)时如何避免图像模糊后边缘透明?

解决图像模糊后边缘透明的问题

方法1:扩展图像边缘并填充背景

模糊算法会采样图像边缘外的区域,默认这些区域是透明的,导致边缘变透。你可以先给图像添加等于模糊半径的内边距,再用原图像作为背景填充这个扩展区域,最后裁剪回原尺寸再应用模糊:

struct BlurWithoutTransparentEdges: View {
    @State private var blurAmount: CGFloat = 0
    
    var body: some View {
        Image("your-image")
            .resizable()
            .scaledToFit()
            .padding(blurAmount)
            .background(
                Image("your-image")
                    .resizable()
                    .scaledToFill()
            )
            .clipped()
            .blur(radius: blurAmount)
            .overlay(Slider(value: $blurAmount, in: 0...30))
    }
}

原理是让模糊采样时能取到和边缘一致的像素,避免透明区域被采样。

方法2:用Core Image滤镜设置边缘处理

如果使用Core Image的CIGaussianBlur,可以通过设置kCIInputExtentKey扩展滤镜处理范围,让算法在边缘外采样时重复原图像的边缘像素:

import CoreImage
import CoreImage.CIFilterBuiltins

func applyBlurToImage(_ image: UIImage, radius: CGFloat) -> UIImage? {
    guard let ciImage = CIImage(image: image) else { return nil }
    
    let blurFilter = CIFilter.gaussianBlur()
    blurFilter.inputImage = ciImage
    blurFilter.radius = radius
    
    // 扩展处理范围,确保模糊采样覆盖边缘外区域
    let extent = ciImage.extent.insetBy(dx: -radius, dy: -radius)
    blurFilter.setValue(CIVector(cgRect: extent), forKey: kCIInputExtentKey)
    
    guard let outputCIImage = blurFilter.outputImage else { return nil }
    let context = CIContext(options: [.useSoftwareRenderer: false])
    guard let outputCGImage = context.createCGImage(outputCIImage, from: ciImage.extent) else { return nil }
    
    return UIImage(cgImage: outputCGImage)
}

方法3:视图背景模糊(针对SwiftUI视图)

如果是给视图而非单独图像加模糊,可以把模糊后的图像作为背景填充整个视图区域,再裁剪:

YourTargetView()
    .background(
        Image("your-image")
            .resizable()
            .scaledToFill()
            .blur(radius: blurAmount)
    )
    .clipped()

内容的提问来源于stack exchange,提问作者SeanKly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:10:37