2

I'd like to add blur effect in UIimage, not UIImage View. I can add blur effect into uiimage view just like this:

let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = img.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
img.addSubview(blurEffectView)

But, I really want to add into uiimage. Because I have to draw image with text. so here is my function:

func textToImageWithPhoto(drawText text: NSString, inImage image: UIImage, atPoint point: CGPoint) -> UIImage {  

    let scale = UIScreen.main.scale

    UIGraphicsBeginImageContextWithOptions(CGSize.init(width: 375, height: 375), false, scale)

    image.draw(in: CGRect(origin: CGPoint.init(x: 0, y: -100), size: CGSize(width: 375, height: 375*1.5)))

    let rect = CGRect(origin: CGPoint.init(x: 0, y: 187.5 - 150/2 ), size: CGSize.init(width: 375, height: 375))
    text.draw(in: rect, withAttributes: textFontAttributes)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    self.saveData(img: newImage!, text: self.quotesTxt.text!) //SAVE CORE DATA

    return newImage!
}

And is there some way to add blur effect within draw function?

3
  • Visite here [blurring & tinting image]((developer.apple.com/library/content/samplecode/UIImageEffects/…) Commented Feb 22, 2017 at 8:17
  • After adding text on your image while returning new image do this before blurredImage = UIImageEffects.imageByApplyingLightEffect(to: newImage) Commented Feb 22, 2017 at 8:22
  • @Mukesh Thanks! But, when I add blur image, image size is changed! I'd like to keep image size. How do I fix it? Commented Feb 22, 2017 at 9:29

1 Answer 1

1
extension UIIMageView {

    func addBlurEffect(){
        //if !UIAccessibilityIsReduceTransparencyEnabled() {

            GlobalData.effectView.frame = self.bounds
            GlobalData.effectView.autoresizingMask = [.flexibleWidth , .flexibleHeight]
            self.addSubview(GlobalData.effectView)

            UIView.animate(withDuration: 0.3, animations: {
                GlobalData.effectView.effect = UIBlurEffect(style: .light)
            })
        //}

    }

    func removeBlurEffect(){
        for subView in self.subviews{
            if subView is UIVisualEffectView{
                UIView.animate(withDuration: 0.3, animations: {
                    GlobalData.effectView.effect = nil
                }, completion: { (success:Bool) in
                    subView.removeFromSuperview()
                })

            }
        }

    }

Use this extension. it's work for me. I dont try but you can change extension type as UIImage maybe.

Sign up to request clarification or add additional context in comments.

2 Comments

OP already mentioned that he don't want to add blur effect into UIImageView
@DharmeshKheni yup..that's right :(

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.