0

Swift - CoreImage

Chắc các bạn khi học lập trình cũng đều biết qua vài ứng dụng chỉnh sửa hình ảnh và cũng muốn làm các ứng dụng tương tự, mình thì cũng không chuyên nhưng giờ nhớ lại được một chút khi mày mó về cái này.

Giới thiệu qua Core image là 1 framwork chỉnh sửa hình ảnh mạnh mẽ,cũng dễ đọc, bài viết này mình sẽ demo 2 ứng dụng nhỏ cho việc chỉnh sửa hình ảnh là filter và làm mờ ảnh.

Bỏ qua phần tạo app , trước tiên các bạn copy image tuỳ ý vào mục Assets, bài này mình lấy ví dụ file ảnh của mình tên Sample mình vào luôn code,demo về filter như sau: trong file ViewController.swift ,trước tiên bạn import CoreImage

import CoreImage

class ViewController: UIViewController {

// Đường dẫn ảnh .
let myInputImage = CIImage(image: UIImage(named: "Sample.jpg")!)

// ImageView.
var myImageView: UIImageView!

// tạo button
let myButton: UIButton = UIButton()

override func viewDidLoad() {
    super.viewDidLoad()

    // Tạo UIImageView
    myImageView = UIImageView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height))
    myImageView.image = UIImage(CIImage: myInputImage!)
    self.view.addSubview(myImageView)

    // Button .
    myButton.frame = CGRectMake(0,0,80,80)
    myButton.backgroundColor = UIColor.grayColor();
    myButton.layer.masksToBounds = true
    myButton.setTitle("Sepia", forState: UIControlState.Normal)
    myButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
    myButton.layer.cornerRadius = 40.0
    myButton.layer.position = CGPoint(x: self.view.frame.width/2, y:self.view.frame.height - 50)
    myButton.tag = 1
    myButton.addTarget(self, action: "onClickMyButton:", forControlEvents: .TouchUpInside)

    // Set background màu thành màu đen .
    self.view.backgroundColor = UIColor.blackColor()

    // Thêm UI button vào View
    self.view.addSubview(myButton);
}

// button event
func onClickMyButton(sender: UIButton){

    let mySepiaFilter = CIFilter(name: "CISepiaTone")

    // set image.
    mySepiaFilter!.setValue(myInputImage, forKey: kCIInputImageKey)

    mySepiaFilter!.setValue(1.0, forKey: kCIInputIntensityKey)

    let myOutputImage : CIImage = mySepiaFilter!.outputImage!

    // Set lại UIView .
    myImageView.image = UIImage(CIImage: myOutputImage)

    // Image mới
    myImageView.setNeedsDisplay()

}

Sau khi build thành công, ấn button Sepia, sẽ có kết quả như sạu.

Screen Shot 2016-03-29 at 23.58.10.png

Chuyển sang ứng dụng làm mờ ,tương tự code có thể flow theo như sau , trước tiên vẫn là import Core Image. import CoreImage

class ViewController: UIViewController {

// Dẫn ảnh .
let myInputImage = CIImage(image: UIImage(named: "Sample.jpg")!)

// Tạo button .
let myButton: UIButton = UIButton()

// UIView
var myImageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Chuyển sang UIImage.
    let myInputUIImage: UIImage = UIImage(CIImage: myInputImage!)

    // ImageView.
    myImageView = UIImageView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height))

    // Tạo UIImageView.
    myImageView.image = myInputUIImage
    self.view.addSubview(myImageView)

    // Button .
    myButton.frame = CGRectMake(0,0,80,80)
    myButton.backgroundColor = UIColor.blueColor();
    myButton.layer.masksToBounds = true
    myButton.setTitle("Làm mờ", forState: UIControlState.Normal)
    myButton.titleLabel?.font = UIFont.systemFontOfSize(UIFont.smallSystemFontSize())
    myButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
    myButton.layer.cornerRadius = 40.0
    myButton.layer.position = CGPoint(x: self.view.frame.width/2, y:self.view.frame.height - 50)
    myButton.tag = 1
    myButton.addTarget(self, action: "onClickMyButton:", forControlEvents: .TouchUpInside)

    // Set background .
    self.view.backgroundColor = UIColor.blackColor()

    self.view.addSubview(myButton);
}

// event
func onClickMyButton(sender: UIButton){

    // Tạo CIFilter.
    let myBlurFilter = CIFilter(name: "CIGaussianBlur")

    // set ảnh muốn làm mờ .
    myBlurFilter!.setValue(myInputImage, forKey: kCIInputImageKey)

    //output ảnh .
    let myOutputImage : CIImage = myBlurFilter!.outputImage!

    // Chuyển sang UIImage.
    let myOutputUIImage: UIImage = UIImage(CIImage: myOutputImage)

    // Set lại UIView .
    myImageView.image = myOutputUIImage

    // ảnh mới .
    myImageView.setNeedsDisplay()

}

} Sau khi build thành công và ấn button làm mờ, bạn sẽ thấy kết quả tương tự như sau Screen Shot 2016-03-30 at 00.09.01.png

Ngoài các ứng dụng trên thì dùng coreImage chúng ta có thể làm thêm nhiều thứ như hợp 2 hình ảnh, lật ảnh ,đổi màu sắc ,Mod transition filter,... Mình sẽ nói tiếp ở phần 2 của chủ đề này.Cám ơn các bạn đã theo dõi và cùng hướng đến lời tuyên thệ của nữ chủ tịch quốc hội đầu tiên.Tôi rất kỳ vọng vào bà


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí