11/08/2018, 21:59

Tìm hiểu về chỉnh sửa ảnh ở IOS 8

Hôm nay chúng ta sẽ tìm hiểu về chỉnh sửa ảnh trong IOS 8, Đầu tiên , các bạn cần phải tạo 1 project với Swift , Trong phần ViewController , các bạn thêm 1 UIImageView , và 1 button là : Filter, Các bạn có thể download project tại đây : https://www.dropbox.com/s/wt0ng9aculrfv3z/Editing ...

Hôm nay chúng ta sẽ tìm hiểu về chỉnh sửa ảnh trong IOS 8, Đầu tiên , các bạn cần phải tạo 1 project với Swift , Trong phần ViewController , các bạn thêm 1 UIImageView , và 1 button là : Filter, Các bạn có thể download project tại đây : https://www.dropbox.com/s/wt0ng9aculrfv3z/Editing Photo.zip?dl=1

Chúng ta sẽ xây dựng trên các màn hình khác nhau , nên chúng ta sẽ dùng autolayout, chúng ta sẽ thêm constraints cho UIImageView như sau constraints

Thêm 1 outlet cho ảnh bởi kéo ảnh vào ViewController class (Sử dụng Assistant editor để chia 2 màn hình kéo vào), sau đó chúng ta sẽ đặt tên là imageView , tiếp theo chúng ta thêm một action cho button là addFilterButton.

Tiếp theo chúng ta sẽ dùng thư viện ImageProcessingKit , Kéo thư viện này vào , sau đó chúng ta sẽ import thư viện này như sau

import ImageProcessingKit import Photos import PhotosUI

Thêm các biến vào class

var processedImage: UIImage? //1 let processor = ImageProcessor() //2

Nhìn vào ta có thể dễ dàng thấy , 1 khai báo 1 biến UIImage , và ở 2 thì chúng ta tạo 1 object ImageProcessor Ở trong phần button Filter action , chúng ta hãy viết

if let input = input { processedImage = processor.processImage(input.displaySizeImage) imageView.image = processedImage }

Đây là đoạn code kiểm tra input

Chúng ta hãy thêm delegate PHContentEditingController, thư viện này của apple , có sẵn các method ,

startContentEditingWithInput(contentEditingInput:, placeholderImage:) – Cái này được gọi trước khi viewcontroller xuất hiện , và nó sẽ kiểm tra xem bức ảnh có được edit ko ? nó sẽ thông qua 2 biến là PHContentEditingInput nó là các giá trị chỉnh sửa, và 1 UIImage. finishContentEditingWithCompletionHandler(completionHandler:) – Method này được gọi sau khi đã editing , và 1 biến PHContentEditingOutput được tạo , sau khi chúng ta đã chỉnh sửa xong ảnh , biến này sẽ lưu lại ảnh đó , và được sử dụng ở completionHandler. cancelContentEditing – và cái cuối cùng cancel , trạng thái này chỉ rõ không chỉnh sửa ảnh nữa , nó sẽ trả về ảnh trước khi chỉnh sửa .

Ở trong hàm startContentEditingWithInput, chúng ta hãy thêm đoạn code này :

func startContentEditingWithInput(contentEditingInput: PHContentEditingInput?, placeholderImage: UIImage) { input = contentEditingInput if let input = contentEditingInput { imageView.image = input.displaySizeImage } }

Tiếp theo ở trong hàm finishContentEditingWithCompletionHandler chúng ta hãy xem xét nó

func finishContentEditingWithCompletionHandler(completionHandler: ((PHContentEditingOutput!) -> Void)!) {

if input == nil { self.cancelContentEditing() return }

dispatch_async(dispatch_get_global_queue(CLong(DISPATCH_QUEUE_PRIORITY_DEFAULT), 0)) { let contentEditingOutput = PHContentEditingOutput(contentEditingInput: self.input)

let archiveData = NSKeyedArchiver.archivedDataWithRootObject("Face Blur") let identifier = "com.appcoda.FaceBlur.FaceBlur-filter" let adjustmentData = PHAdjustmentData(formatIdentifier: identifier, formatVersion: "1.0", data: archiveData) contentEditingOutput.adjustmentData = adjustmentData

if let path = self.input!.fullSizeImageURL.path { var image = UIImage(contentsOfFile: path)! image = self.processor.processImage(image)

let jpegData = UIImageJPEGRepresentation(image, 1.0) var error: NSError?

let saveSucceeded = jpegData.writeToURL(contentEditingOutput.renderedContentURL, options: .DataWritingAtomic, error: &error) if saveSucceeded { completionHandler(contentEditingOutput) } else { println("Save error") completionHandler(nil) } } else { println("Load error") completionHandler(nil) } } }

Chúng ta nhìn vào thấy rõ đầu tiên check xem input có nil không ? nếu có thì chúng ta return , sau đó chúng ta tiến hành đồng bộ . Tiếp theo , chúng ta tạo 1 biến PHContentEditingOutput từ input , chúng ta tạo tiếp PHAdjustmentData, dữ liệu có thể chỉnh sửa , Chúng ta load đầy đủ kích thước ảnh vào bộ lọc , chúng ta chuyển đổi thành JPEG , và sau khi chỉnh sửa xong , chúng ta lưu nó ở trên disk của điện thoại, nếu thành công , thì chúng ta sẽ xử lý ở trong completion handler với một output.

Bạn có thể xem demo hoàn thiện ở đây để tham khảo thêm : https://www.dropbox.com/s/tg176ca26wt4g4k/Editing Photo1.zip?dl=1

0