Photo Editing Extension: nó là gì và khả năng của tiện ích mở rộng cho iOS

Tác giả: IT Sectr Đã đăng: 2026-06-15 Thời gian đọc: 9 phút

Photo Editing Extension là cơ chế iOS cho phép các ứng dụng bên thứ ba thêm công cụ chỉnh sửa trực tiếp vào ứng dụng Ảnh hệ thống. Không giống như các trình chỉnh sửa đầy đủ tính năng, tiện ích mở rộng không tải ảnh vào ứng dụng riêng biệt — người dùng áp dụng bộ lọc, điều chỉnh màu sắc hoặc thêm hiệu ứng mà không cần rời khỏi giao diện tiêu chuẩn. Theo Tài liệu dành cho nhà phát triển Apple (2025), PhotoKit cung cấp hơn 40 API để làm việc với tài nguyên ảnh, bao gồm PHAdjustmentData và PHContentEditingController.

Những điểm chính

  • Photo Editing Extension nhúng các công cụ chỉnh sửa vào ứng dụng Ảnh tiêu chuẩn của iOS mà không cần chuyển đổi giữa các chương trình
  • Kiến trúc được xây dựng trên giao thức PHContentEditingController, quản lý việc hiển thị giao diện và lấy ảnh gốc
  • Tiện ích mở rộng sử dụng chỉnh sửa không phá hủy — tất cả các thay đổi được lưu dưới dạng AdjustmentData, trong khi bản gốc vẫn còn nguyên vẹn
  • Để làm việc với ảnh, tiện ích mở rộng nhận PHContentEditingInput với tệp ảnh đầy đủ và siêu dữ liệu
  • PhotoKit cung cấp quyền truy cập vào tài nguyên ảnh thông qua PHAsset, PHAssetResource và PHImageManager

Photo Editing Extension trong iOS là gì

Photo Editing Extension là một loại tiện ích mở rộng ứng dụng trong iOS nhúng các công cụ xử lý ảnh vào giao diện tiêu chuẩn của ứng dụng Ảnh. Người dùng mở ảnh, nhấn nút Chỉnh sửa và chọn tiện ích mở rộng mong muốn từ danh sách đã cài đặt. Sau khi chỉnh sửa, kết quả được lưu lại vào thư viện và tệp gốc vẫn có sẵn để khôi phục.

Kiến trúc này giải quyết một vấn đề chính của trải nghiệm người dùng: không cần chuyển đổi giữa các ứng dụng, xuất và nhập ảnh, hay theo dõi phiên bản. Theo WWDC 2025, tất cả các tiện ích mở rộng chạy trong một tiến trình biệt lập với hộp cát riêng và thời gian thực thi giới hạn — lên đến 30 giây cho mỗi thao tác chỉnh sửa.

Tiện ích mở rộng không có quyền truy cập vào các tệp tùy ý trong bộ nhớ thiết bị — chỉ vào ảnh mà người dùng đã truyền một cách rõ ràng qua giao diện lựa chọn. Điều này đảm bảo an toàn dữ liệu người dùng khi sử dụng các công cụ của bên thứ ba.

PhotoKit: Kiến trúc và các thành phần chính

PhotoKit là một framework của Apple để làm việc với thư viện phương tiện của thiết bị, được giới thiệu trong iOS 8. Nó cung cấp quyền truy cập lập trình vào các tài nguyên Ảnh, bao gồm ảnh, video, album và siêu dữ liệu. Đối với các tiện ích mở rộng chỉnh sửa, PhotoKit đóng vai trò là lớp trung gian giữa bộ nhớ và giao diện sửa đổi.

PHAsset và PHAssetResource

PHAsset đại diện cho một đối tượng phương tiện riêng lẻ trong thư viện — ảnh hoặc video. Thông qua PHAsset, bạn có thể lấy siêu dữ liệu: ngày chụp, loại tệp, vị trí trên bản đồ và hướng máy ảnh. PHAssetResource cung cấp quyền truy cập vào các tài nguyên cơ bản — ví dụ, vào tệp ảnh gốc ở định dạng RAW hoặc HEIC.

Đối với tiện ích mở rộng chỉnh sửa, PHContentEditingInput có tầm quan trọng then chốt — một đối tượng chứa tệp ảnh (hoặc video) đầy đủ có sẵn để đọc và xử lý. Tiện ích mở rộng nhận đối tượng này tại thời điểm kích hoạt và sử dụng nó làm vật liệu nguồn.

PHImageManager và bộ nhớ đệm

PHImageManager quản lý việc tải và lưu trữ đệm ảnh. Đối với tiện ích mở rộng chỉnh sửa, nó không được sử dụng trực tiếp — tiện ích mở rộng nhận tệp đầy đủ qua PHContentEditingInput. Tuy nhiên, PHImageRequestOptions cho phép bạn cấu hình các tham số yêu cầu: kích thước, loại phân phối (đồng bộ hoặc không đồng bộ) và định dạng kết quả.

Theo Apple, PHImageManager tự động lưu trữ đệm hình thu nhỏ ảnh trong RAM, giúp tăng tốc hiển thị xem trước lặp lại. Đối với tiện ích mở rộng chỉnh sửa, bạn nên sử dụng PHImageRequestOptionsDeliveryModeHighQualityFormat để có chất lượng ảnh tốt nhất.

swift
let options = PHImageRequestOptions()
options.deliveryMode = .highQualityFormat
options.isSynchronous = true

PHImageManager.default().requestImage(
    for: asset,
    targetSize: .init(width: 1024, height: 1024),
    contentMode: .aspectFill,
    options: options
) { image, _ in
    // use image for display
}

Tạo tiện ích mở rộng: PHContentEditingController

Mỗi Photo Editing Extension triển khai giao thức PHContentEditingController — thành phần điều khiển trung tâm của tiện ích mở rộng. Giao thức định nghĩa các phương thức để hiển thị giao diện, nhận dữ liệu đầu vào và lưu kết quả.

Các phương thức chính của giao thức

beginContentEditing(with:) được gọi khi phiên chỉnh sửa bắt đầu. Tiện ích mở rộng nhận PHContentEditingInput và phải hiển thị giao diện với ảnh gốc. finishContentEditing(completionHandler:) hoàn tất chỉnh sửa — tiện ích mở rộng trả về PHContentEditingOutput với tệp đã sửa đổi và AdjustmentData. cancelContentEditing() hủy các thay đổi mà không lưu.

Một sắc thái quan trọng: tại thời điểm gọi beginContentEditing, tiện ích mở rộng chỉ có quyền truy cập vào một phiên bản của ảnh — phiên bản mà người dùng đã yêu cầu. Nó không thể truy cập vào ảnh hoặc album khác. Đây là hạn chế của hộp cát do Apple đưa ra vì lý do bảo mật.

swift
class PhotoEditingViewController: UIViewController {

    override func beginContentEditing(
        with input: PHContentEditingInput
    ) {
        guard let url = input.fullSizeImageURL else { return }
        let image = CIImage(contentsOf: url)
        displayImage.image = UIImage(ciImage: image)
    }
}

Kiến trúc phân tách

PHContentEditingController tách biệt giao diện chỉnh sửa khỏi logic lưu trữ. Tiến trình chính của iOS gọi beginContentEditing, tiện ích mở rộng hiển thị UI của nó, người dùng thực hiện thay đổi, sau đó finishContentEditing tạo tệp mới. Apple khuyên bạn nên thực hiện tất cả các xử lý tốn tài nguyên — bộ lọc CIFilter, thao tác Core Image — trong luồng nền, không phải luồng chính, để không chặn giao diện.

Chỉnh sửa không phá hủy qua AdjustmentData

PHAdjustmentData là cơ chế chính cho phép chỉnh sửa không phá hủy trong Photo Editing Extension. Đây là một đối tượng chứa thông tin về các thay đổi đã áp dụng ở định dạng tùy ý. Tiện ích mở rộng tuần tự hóa các tham số bộ lọc, mặt nạ và cài đặt thành AdjustmentData và lưu chúng cùng với ảnh đã sửa đổi.

Khi mở lại ảnh, tiện ích mở rộng đọc AdjustmentData, khôi phục trạng thái giao diện trước đó và cho phép người dùng tiếp tục chỉnh sửa từ cùng một điểm. Nếu tiện ích mở rộng không được cài đặt, ảnh được hiển thị ở phiên bản đã lưu cuối cùng, trong khi bản gốc được lưu trữ riêng.

Theo Tài liệu Apple, PHAdjustmentData lưu trữ formatIdentifier và formatVersion — các chuỗi để xác định định dạng dữ liệu. Khi cập nhật tiện ích mở rộng, bạn nên kiểm tra phiên bản và xử lý chính xác các định dạng cũ.

swift
let adjustmentData = PHAdjustmentData(
    formatIdentifier: "com.example.photoediting",
    formatVersion: "1.0",
    data: NSKeyedArchiver.archivedData(
        withRootObject: params,
        requiringSecureCoding: true
    )
)
output.adjustmentData = adjustmentData

Tại thời điểm finishContentEditing, tiện ích mở rộng ghi AdjustmentData vào đối tượng PHContentEditingOutput cùng với tệp ảnh đã sửa đổi. Hệ thống sau đó lưu cả hai thành phần: phiên bản để hiển thị và siêu dữ liệu để khôi phục phiên chỉnh sửa.

Tích hợp với ứng dụng Ảnh

Photo Editing Extension tự động xuất hiện trong menu của ứng dụng Ảnh sau khi cài đặt ứng dụng chứa nó. Người dùng mở ảnh, chọn Chỉnh sửa, và ở hàng công cụ phía dưới, tất cả các tiện ích mở rộng chỉnh sửa đã cài đặt — cả hệ thống và bên thứ ba — được hiển thị.

Đăng ký tiện ích mở rộng

Tiện ích mở rộng được đăng ký thông qua Info.plist của ứng dụng chính với khóa NSExtensionActivationRule, khóa này chỉ định loại nội dung nào kích hoạt tiện ích mở rộng. Đối với trình chỉnh sửa ảnh, ActivationRule thường yêu cầu image — tiện ích mở rộng sẽ không xuất hiện cho video hoặc Ảnh sống.

Apple khuyên bạn nên chỉ định các loại kích hoạt cụ thể để không làm quá tải menu chỉnh sửa. Nếu tiện ích mở rộng chỉ hỗ trợ JPEG và HEIC, bạn nên giới hạn kích hoạt ở các định dạng này.

xml
<!-- Info.plist -->
<key>NSExtension</key>
<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.photo-editing</string>
    <key>NSExtensionActivationRule</key>
    <string>SUBQUERY (extensionItems,
        @count <= 1)</string>
</dict>

Tương tác với người dùng

Sau khi chọn tiện ích mở rộng, iOS tạo một tiến trình riêng với UIViewController tùy chỉnh được hiển thị trên giao diện Ảnh. Người dùng thấy ảnh của mình, các công cụ của tiện ích mở rộng và các nút Hủy/Xong. Tiện ích mở rộng không thể thay đổi điều hướng bên ngoài bộ điều khiển của nó hoặc truy cập vào các phần khác của hệ thống.

Theo Nguyên tắc Giao diện Người dùng của Apple, giao diện tiện ích mở rộng phải tối giản và chức năng — không có quảng cáo, liên kết ngoài hoặc các yếu tố điều hướng không cần thiết. Bạn nên sử dụng UIScrollView để hiển thị bảng công cụ nhằm tránh làm lộn xộn màn hình.

Câu hỏi thường gặp

Photo Editing Extension lấy quyền truy cập vào ảnh như thế nào?

Tiện ích mở rộng nhận PHContentEditingInput với URL của tệp ảnh đầy đủ thông qua phương thức beginContentEditing(with:). Quyền truy cập chỉ được cấp cho một ảnh đã chọn — không có quyền đối với các tài nguyên thư viện khác.

Tiện ích mở rộng có thể sửa đổi ảnh gốc không?

Không, bản gốc không bao giờ bị sửa đổi. Tiện ích mở rộng tạo phiên bản mới thông qua PHContentEditingOutput, và AdjustmentData lưu trữ các tham số thay đổi để có thể khôi phục về trạng thái ban đầu.

Photo Editing Extension hỗ trợ những loại tệp nào?

Tiện ích mở rộng hoạt động với tất cả các định dạng được PhotoKit hỗ trợ: JPEG, HEIC, RAW, PNG, TIFF và Ảnh sống. Các giới hạn được đặt thông qua NSExtensionActivationRule trong Info.plist của tiện ích mở rộng.

Bao nhiêu thời gian được dành cho việc chỉnh sửa?

iOS phân bổ tối đa 30 giây cho thao tác finishContentEditing. Nếu vượt quá giới hạn, tiện ích mở rộng bị buộc kết thúc và các thay đổi không được lưu. Xử lý nền với CIFilter không kéo dài thời gian này.

Tôi có thể sử dụng Core Image và Metal trong tiện ích mở rộng không?

Có, Core Image (CIFilter) và Metal (cho shader tùy chỉnh) được hỗ trợ đầy đủ. Apple khuyên bạn nên chuyển các tính toán nặng sang các luồng nền thông qua Grand Central Dispatch.

Tổng kết

  • Photo Editing Extension là công cụ chỉnh sửa có thể nhúng trong ứng dụng Ảnh hoạt động mà không cần chuyển đổi giữa các ứng dụng
  • Kiến trúc sử dụng PHContentEditingController để quản lý phiên chỉnh sửa và nhận dữ liệu đầu vào
  • PhotoKit cung cấp PHAsset, PHImageManager và PHContentEditingInput để truy cập tài nguyên phương tiện của thiết bị
  • PHAdjustmentData cho phép chỉnh sửa không phá hủy — tuần tự hóa các tham số thay đổi với khả năng khôi phục
  • Tiện ích mở rộng chạy trong hộp cát với giới hạn 30 giây và chỉ truy cập một ảnh mỗi phiên
  • Hỗ trợ Core Image, Metal và tất cả các định dạng PhotoKit: JPEG, HEIC, RAW, PNG, TIFF và Ảnh sống

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm