CoreImage: ano ito, mga filter at pagtatrabaho sa mga imahe

May-akda: IT Sectr Nai-publish: 2026-05-06 Oras ng pagbabasa: 9 min

Ang CoreImage ay isang framework ng Apple para sa real-time na pagproseso ng mga imahe at video, na nagbibigay ng dose-dosenang built-in na CIFilter para sa pagwawasto ng kulay, pag-blur, paglalagay ng texture at pag-detect. Ayon sa Apple Documentation, ginagamit ng CoreImage ang GPU para sa mataas na pagganap na pagproseso ng pixel sa mga iOS device. Ang framework ay sumusuporta sa CIImage bilang isang hindi nababagong object ng imahe at mga chain ng filter para sa komposisyon ng mga epekto nang walang pagkawala ng kalidad.

Mga pangunahing puntos

  • CoreImage — framework ng Apple para sa GPU-accelerated na pagproseso ng imahe at video sa iOS at macOS
  • CIFilter — pangunahing bloke ng gusali na may higit sa 200 built-in na epekto at suporta para sa custom na Metal shader
  • CIImage — hindi nababagong object na kumakatawan sa imahe sa CoreImage pipeline nang walang pagkakatali sa isang partikular na format
  • CIDetector — component para sa pag-detect ng mga mukha, teksto, QR code at parihaba sa imahe
  • Pagproseso ng GPU — awtomatikong ginagamit ng CoreImage ang Metal o OpenGL para sa parallel na pag-compute sa GPU

Ano ang CoreImage

CoreImage ay isang framework ng Apple para sa pagproseso ng raster na imahe at video, unang ipinakilala sa macOS 10.4 Tiger at na-port sa iOS 5.0. Hindi tulad ng Core Graphics o UIKit, ang CoreImage ay gumagana sa antas ng pixel shader, gamit ang GPU para sa parallel na pag-compute. Ito ay nagbibigay-daan sa paglalapat ng mga kumplikadong epekto — pag-blur, pagwawasto ng kulay, morphing — sa mga imahe na may megapixel na resolusyon sa millisecond.

Ang arkitektura ng CoreImage ay binuo sa konsepto ng lazy evaluation: hindi ginagawa ng CIFilter ang pagproseso hanggang sa sandali ng rendering sa CIContext. Ang developer ay bumubuo ng isang chain ng ilang CIFilter, na ikinokonekta ang output ng isang filter sa input ng isa pa, at tanging ang tawag sa render ang nagpapasimula ng buong GPU pipeline. Ito ay nagpapaliit sa bilang ng mga pass sa graphics card at nagpapanatili ng pagganap.

Sinusuportahan ng CoreImage ang malawak na gamut ng kulay (P3, sRGB, linear sRGB), HDR na imahe at paggawa gamit ang 16-bit at 32-bit na pixel format. Sa mga device na may Neural Engine, maaaring pagsamahin ng CoreImage ang GPU shader sa Core ML para sa matalinong pagproseso — halimbawa, awtomatikong pagwawasto ng kulay batay sa machine learning, tulad ng ipinatupad sa Photos app sa iOS 17.

Arkitektura ng CoreImage: CIImage, CIFilter, CIContext

Tatlong pangunahing klase ang bumubuo sa core ng CoreImage: CIImage (data), CIFilter (operasyon) at CIContext (kapaligiran ng pagpapatupad). Bawat klase ay responsable para sa sarili nitong yugto sa pipeline at hindi pinaghahalo ang mga responsibilidad.

CIImage — hindi nababagong pinagmulan

CIImage ay isang magaan na object na naglalarawan ng imahe ngunit hindi direktang naglalaman ng pixel data. Maaari itong malikha mula sa UIImage, CGImage, Metal texture, GL texture o file sa disk. Ang CIImage ay hindi nababago — bawat paglalapat ng filter ay lumilikha ng bagong CIImage nang hindi binabago ang orihinal. Ito ay nagbibigay-daan sa pagbuo ng mga chain ng pagbabago nang hindi kinokopya ang data sa pagitan ng mga hakbang.

Mahalagang tampok: ang CIImage ay hindi nakatali sa resolution ng screen o espasyo ng kulay hanggang sa sandali ng rendering. Ang parehong CIImage ay maaaring i-render sa UIImage para sa screen at sa TIFF file para sa pag-print na may iba’t ibang parameter — awtomatikong iniaangkop ng CoreImage ang pagproseso sa target na konteksto.

CIFilter — operasyon ng pagproseso

CIFilter ay ang pangunahing klase para sa paglalapat ng mga epekto. Bawat CIFilter ay kumakatawan sa isang shader program na may mga input parameter (inputImage, inputIntensity, inputRadius atbp.) at isang output na imahe. Ang Apple ay naghahatid ng higit sa 200 built-in na CIFilter, na naka-grupo sa mga kategorya: CICategoryColorEffect (pagwawasto ng kulay), CICategoryBlur (pag-blur), CICategoryStylize (pag-istilo), CICategoryGeometryAdjust (mga pagbabagong geometriko).

Upang lumikha ng isang custom na CIFilter, ang developer ay nagsusulat ng Metal shader (CIKernel) — isang fragment shader sa wikang Metal Shading Language na nagpoproseso ng bawat pixel nang nakapag-iisa. Pagkatapos ng compilation, ang shader ay nirerehistro bilang isang subclass ng CIFilter at maaaring gamitin sa mga chain kasama ng built-in na Apple filters.

KategoryaHalimbawa ng filterLayunin
ColorEffectCIColorControlsLiwanag, contrast, saturation
BlurCIGaussianBlurGaussian blur na may adjustable radius
StylizeCIPixellatePikselasyon ng imahe na may tinukoy na scale
GeometryAdjustCIAffineTransformPag-ikot, scale, paglipat sa pamamagitan ng affine matrix
CompositeCISourceOverCompositingPagpapatong ng mga imahe na may alpha channel

CIContext — kapaligiran ng rendering

CIContext ay isang mabigat na object na namamahala sa paglalaan ng GPU resources, compilation ng shader at buffering. Ang paglikha ng CIContext ay isang mahal na operasyon, kaya inirerekomenda ng Apple na likhain ito nang isang beses para sa buong lifecycle ng app at muling gamitin. Ang konteksto ay nakatali sa isang partikular na GPU (Metal, OpenGL) o CPU at tinutukoy ang espasyo ng kulay ng output na imahe.

CIFilter: built-in na mga filter at custom na Metal shader

Ang CIFilter library ay patuloy na lumalawak: ang iOS 17 ay nagdagdag ng mga bagong filter para sa HDR processing at machine learning. Lahat ng built-in na filter ay dokumentado sa Apple Developer Documentation at maaaring hanapin ayon sa kategorya o pangalan. Para sa pag-detect ng mga available na filter sa device, gamitin ang CIFilter.filterNames(inCategory:).

Chain ng maraming filter

Ang pangunahing kakayahan ng CoreImage — komposisyon ng maraming CIFilter sa isang chain. Ang output ng isang filter ay ibinibigay sa input ng susunod sa pamamagitan ng parameter na inputImage. Ino-optimize ng CoreImage ang chain sa yugto ng rendering: ang mga katabing filter na gumagana sa parehong espasyo ng kulay ay pinagsama sa isang GPU pass (kernel fusion). Nagbibigay ito ng pagtaas sa pagganap nang walang interbensyon ng developer.

Custom na mga filter sa pamamagitan ng CIKernel

Upang lumikha ng sariling epekto, ang developer ay nagsusulat ng Metal function na may annotation na [[kernel]]. Ang function ay tumatanggap ng pixel coordinates at nagbabalik ng kulay. Ipinapadala ng CoreImage ang shader sa GPU, kung saan ito ay isinasagawa nang parallel para sa lahat ng pixel ng imahe. Ang mga custom na filter ay lalong kapaki-pakinabang para sa mga natatanging visual effect: sepia na may non-linear curve, dispersion blur o imitasyon ng film grain.

metal
#include <CoreImage/CoreImage.h>

[[kernel]] float4 customFilter(sample_t s, float intensity) {
    float4 result;
    result.rgb = s.rgb * (1.0 - intensity) + s.r * intensity;
    result.a = s.a;
    return result;
}

Pagganap at caching

CoreImage ay awtomatikong namamahala ng cache ng mga intermediate na resulta. Kung ang parehong chain ng filter ay inilapat sa iba’t ibang mga imahe, maaaring gamitin muli ng CoreImage ang mga na-compile na shader. Para sa maximum na pagganap, iwasan ang paglikha ng CIContext para sa bawat frame — gumamit ng isang konteksto at muling itakda ang mga input parameter ng filter.

CIDetector: pag-detect ng mukha, teksto at bagay

CIDetector ay ang subsystem ng CoreImage para sa pag-detect ng mga semantikong bagay sa imahe nang hindi gumagamit ng Vision o Core ML. Ang CIDetector ay sumusuporta sa apat na uri ng detection: mukha (CIDetectorTypeFace), teksto (CIDetectorTypeText), QR code (CIDetectorTypeQRCode) at parihaba (CIDetectorTypeRectangle). Ang detector ay gumagana sa CPU na may optimization para sa NEON instructions, na tinitiyak ang matatag na bilis sa mga device na walang malakas na GPU.

Detection ng mukha

Ang face detector na CIDetectorTypeFace ay nagbabalik ng array ng CIFaceFeature na may mga coordinate ng hangganan ng mukha, posisyon ng mga mata at bibig. Mula noong iOS 12, tinutukoy din ng CIDetector ang ngiti (hasSmile) at posisyon ng kaliwang/kanang mata (leftEyeClosed, rightEyeClosed). Ang katumpakan ng detection ay sapat para sa karamihan ng AR at photo applications, ngunit para sa kritikal na mga senaryo, inirerekomenda ng Apple ang Vision.framework.

Detection ng parihaba

CIDetectorTypeRectangle ay nakakahanap ng mga parihabang lugar sa imahe — mga dokumento, business card, screen ng device. Ang detector ay nagbabalik ng CIRectangleFeature na may apat na puntos na bumubuo sa contour ng parihaba. Ayon sa WWDC 2024, ang rectangle detector ay gumagamit ng parehong neural network architecture tulad ng Vision, ngunit may mas mababang paggamit ng memory. Ginagawa nitong mas gusto para sa real-time na pagproseso ng stream ng frame, halimbawa sa mga document scanner app.

Halimbawa ng code: mga filter at detection sa Swift

Mga praktikal na halimbawa ay makakatulong na patatagin ang pag-unawa sa CoreImage. Tingnan natin ang dalawang karaniwang senaryo: paglalapat ng color filter sa isang larawan at face detection na may pagguhit ng frame.

Paglalapat ng sepia sa isang imahe

Pangunahing halimbawa ng CISepiaTone filter, na nagko-convert ng kulay na imahe sa sepia tones. Ang filter ay tumatanggap ng parameter na inputIntensity mula 0 (orihinal) hanggang 1 (maximum effect). Pansinin ang lazy evaluation: ang CIImage na ibinalik ng filter.outputImage ay hindi naglalaman ng mga pixel — ang rendering ay nangyayari lamang sa pagtawag ng context.createCGImage.

swift
import CoreImage

guard let inputImage = CIImage(image: uiImage) else { return }
let filter = CIFilter(name: "CISepiaTone")
filter?.setValue(inputImage, forKey: kCIInputImageKey)
filter?.setValue(0.8, forKey: kCIInputIntensityKey)

let context = CIContext()
let outputImage = filter?.outputImage
let cgImage = context.createCGImage(outputImage!, from: inputImage.extent)
let resultImage = UIImage(cgImage: cgImage!)

Face detection na may pagguhit ng frame

Ang sumusunod na halimbawa ay gumagamit ng CIDetector upang maghanap ng mga mukha sa imahe at gumuhit ng parihaba sa paligid ng bawat natagpuang mukha. Ang CIFaceFeature ay naglalaman ng mga coordinate sa sistema ng imahe (simula sa kaliwang sulok sa ibaba), kaya sa pagguhit sa UIKit ay kinakailangan ang pagbabago ng coordinate sa pamamagitan ng affine transform.

swift
let detector = CIDetector(
    ofType: CIDetectorTypeFace,
    context: context,
    options: [CIDetectorAccuracy: CIDetectorAccuracyHigh]
)
let features = detector?.features(in: inputImage) as? [CIFaceFeature]

for face in features ?? [] {
    print("Face bounds: \(face.bounds)")
    if face.hasSmile {
        print("Ngumiti ang tao")
    }
}

Komposisyon ng maraming epekto

Ang huling halimbawa ay nagpapakita ng chain ng tatlong filter: color correction, vignette at texture application. Pansinin na ang outputImage ng unang filter ay ipinapasa bilang inputImage sa pangalawa — nang walang intermediate rendering. Sa pagtawag ng createCGImage, pinagsasama ng CoreImage ang lahat ng tatlong operasyon sa isang GPU pass.

swift
let colorFilter = CIFilter(name: "CIColorControls")
colorFilter?.setValue(inputImage, forKey: kCIInputImageKey)
colorFilter?.setValues([
    kCIInputBrightnessKey: 0.1,
    kCIInputContrastKey: 1.2
])

let vignetteFilter = CIFilter(name: "CIVignette")
vignetteFilter?.setValue(colorFilter?.outputImage, forKey: kCIInputImageKey)
vignetteFilter?.setValue(2.0, forKey: "inputRadius")

let finalImage = vignetteFilter?.outputImage
let result = context.createCGImage(finalImage!, from: inputImage.extent)

Mga madalas itanong

Paano naiiba ang CoreImage sa Core Graphics?

CoreImage ay gumagana sa GPU at na-optimize para sa pixel operations (mga filter, color correction), habang ang Core Graphics ay isang CPU library para sa vector drawing at 2D context. Ang CoreImage ay mas mabilis para sa maramihang pagproseso ng imahe, ang Core Graphics ay mas tumpak para sa step-by-step na pagguhit ng interface.

Maaari bang ilapat ang CoreImage sa real-time na video?

Oo — sinusuportahan ng CoreImage ang pagproseso ng indibidwal na video frame sa pamamagitan ng AVPlayerItemVideoOutput o AVCaptureOutput. Para sa streaming processing, gamitin ang AVVideoComposition with CIFilter, na nagbibigay-daan sa paglalapat ng mga epekto nang hindi kinokopya ang mga frame sa pagitan ng CPU at GPU.

Anong color profile ang ginagamit ng CoreImage bilang default?

CoreImage ay gumagana bilang default sa working color space na sRGB (kCGColorSpaceSRGB). Sa paglikha ng CIContext, maaari kang tumukoy ng alternatibong espasyo — extended linear sRGB para sa HDR o Display P3 para sa mga display na may malawak na gamut.

Ilang CIFilter ang maaaring pagsamahin sa isang chain?

Walang limitasyon sa bilang ng mga filter sa isang chain, ngunit bawat 5–7 magkakasunod na filter ay lumilikha ng karagdagang GPU pass. Para sa higit sa 10 filter, inirerekomenda na hatiin ang chain sa mga grupo at i-render ang mga intermediate na resulta upang maiwasan ang paglampas sa limitasyon ng rehistro ng shader.

Gumagana ba ang CIDetector sa mga device na walang Neural Engine?

Oo — ang CIDetector ay gumagana sa CPU gamit ang NEON instructions sa lahat ng device na may iOS 5.0 at mas bago. Ang katumpakan ng detection ay pareho sa lahat ng device, ngunit ang bilis ay mas mataas sa Apple A12+ chips dahil sa hardware acceleration ng neural networks.

Buod

  • CoreImage — framework ng Apple na may GPU acceleration para sa pagproseso ng imahe at video sa iOS at macOS
  • CIImage, CIFilter at CIContext ay bumubuo ng three-layer architecture na may lazy evaluation
  • Higit sa 200 built-in na CIFilter ang sumasaklaw sa karamihan ng mga gawain ng color correction, blur at stylization
  • Custom na mga filter ay nilikha sa pamamagitan ng Metal CIKernel na may annotation na [[kernel]]
  • CIDetector ay nakakahanap ng mga mukha, teksto, QR code at parihaba nang hindi kinokonekta ang Vision.framework
  • Ang mga filter chain ay awtomatikong na-optimize sa pamamagitan ng kernel fusion sa isang GPU pass
  • Para sa real-time na pagproseso ng video, gamitin ang AVVideoComposition na may CIFilter

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din