iOS基于OpenGL的GPU加速濾鏡:iOS-GPUImage-plus
iOS基于OpenGL的GPU加速濾鏡。
簡介
-
目前只是放了個demo以及debug+release版本的ios版靜態庫文件(libcge.a, 支持armv7 armv7s arm64),不包含核心代碼
-
不定期更新靜態庫文件以及demo
-
For study only, and no free tech support by now.
展示
文檔
本lib使用簡單, 濾鏡自定義可以全部通過純文本配置來完成。 (目前不提供編輯器)
文本解析器的目的是讓完全不懂GLSL甚至編程的人也知道如何快速添加新的特效。
EffectString解析規則和常用方法說明:
-
每一步不同的處理均以'@'開頭,后面跟處理方式。中間可以有空格或者沒有 例: "@ method" 或者 "@method" 均為正確格式。method后面可以跟任意個字符,以空格隔開。 method后面的所有字符(直到下一個"@"符號或者字符串結束)將作為參數傳遞給該method對應的Parser.
-
curve方法參數解釋: @curve方法格式為 "@curve <arg1> <arg2> ... <argN>" <argN> 的格式有兩種: "RGB (x1,y1) (xn, yn)", xn和yn分別表示0~255之間的數字 或者 "R (rx1,ry1) ... (rxn, ryn) G (gx1,gy1) ... (gxn,gyn) B (bx1,by1)...(bxn,byn)" 其中R,G,B分別表示對應通道,后面跟的點即為該通道下的點。 括號與參數之間可以有空格也可以沒有。括號中的x與y之間可以使用任意間隔符如空格,逗號等.
例: 曲線A: RGB 通道調整點為 (0, 0) (100, 200) (255, 255) 格式: "@curve RGB(0,0) (100, 200) (255, 255)"
曲線B: R通道(0, 0) (50, 25) (255, 255), G通道(0, 0) (100, 150) (255, 255), RGB通道(0, 0) (200, 150) (255, 255) 格式: "@curve R(0,0) (50, 25) (255, 255) G(0, 0) (100,150) (255, 255) RGB(0, 0) (200, 150) (255, 255)". PS(WangYang):為了簡化我們的工作,我編寫了曲線格式生成工具。請到tool目錄下獲取。
注: 當有連續多次curve調整時,可只寫一次"@curve",以上面的例子為例,如果曲線A,B中間沒有其他操作,那么可以將A,B連接為一條curve 指令,這將節省開銷加快程序執行速度。 例: "@curve RGB(0,0) (100, 200) (255, 255) R(0,0) (50, 25) (255, 255) G(0, 0) (100,150) (255, 255) RGB(0, 0) (200, 150) (255, 255)" (與上例先后執行曲線A,曲線B結果相同)
- blend方法參數解釋: @blend方法格式為 "@blend <function> <texture> <intensity>" <function>值目前有
正常: mix 溶解: dissolve[dsv]
變暗: darken[dk] 正片疊底: multiply[mp] 顏色加深: colorburn[cb] 線性加深: linearburn[lb] 深色: darkercolor[dc]
變亮: lighten[lt] 濾色: screen[sr] 顏色減淡: colordodge[cd] 線性減淡: lineardodge[ld] 淺色: lightercolor[lc]
疊加: overlay[ol] 柔光: softlight[sl] 強光: hardlight[hl] 亮光: vividlight[vvl] 線性光: linearlight[ll] 點光: pinlight[pl] 實色混合: hardmix[hm]
差值: difference[dif] 排除: exclude[ec] 減去: subtract[sub] 劃分: divide[div]
色相: hue 飽和度: saturation[sat] 顏色: color[cl] 明度: luminosity[lum]
相加: add 反向加: addrev 黑白: colorbw //此方法僅依據texture的alpha通道將src color置換為黑白.
注: [] 中的表示該值的縮寫,可以使用縮寫代替原本過長的參數值。
<texture> 參數表示所用到的資源文件名,包含后綴!
<intensity>表示疊加強度(不透明度),為(0, 100] 之間的整數。
例:使用資源圖 src.jpg 進行疊加,強度為80% 格式: "@blend overlay src.jpg 80" 或者 "@blend ol src.jpg 80"
-
krblend方法參數解釋: @krblend方法格式與blend方法一樣。參見@blend方法。 另, krblend所有參數以及用法均與blend方法一致。區別在于krblend方法進行紋理處理時, 將固定紋理的比例以及對紋理進行等比例縮放以使最終覆蓋全圖。
-
pixblend方法參數解釋: @pixblend方法格式為 "@pixblend <function> <color> <intensity>" <function>參數與blend方法相同,請直接參考blend方法。 <intensity>參數含義與blend方法相同,請直接參考blend方法。 <color>參數包含四個浮點數,分別表示這個顏色的r,g,b,a,取值范圍為 [0, 1] 或者 [0, 255] 例: 使用純紅色進行疊加,強度為90% 格式: "@pixblend overlay 1 0 0 0 90" -->注意,中間的顏色值可以寫為小數。當alpha值大于1時,所有顏色參數值域范圍將被認為是[0, 255] 否則被認為是[0, 1]
-
selfblend方法參數解釋: @selfblend方法格式為 "@selfblend <function> <intensity>" 注: 此方法中對應的參數與blend方法相同,區別在于沒有<texture>參數。本方法將使用待處理圖片自身顏色進行混合。
-
adjust方法參數解釋: @adjust方法格式為 "@adjust <function> <arg1>...<argN>" <function>值目前有 brightness (亮度): 后接一個參數 intensity, 范圍 [-1, 1]
contrast (對比度): 后接一個參數 intensity, 范圍 intensity > 0, 當 intensity = 0 時為灰色圖像, intensity = 1 時為無效果, intensity > 1 時加強對比度.
saturation (飽和度): 后接一個參數 intensity, 范圍 intensity > 0, 當 intensity = 0 時為黑白圖像, intensity = 1 時為無效果, intensity > 1 時加強飽和度
monochrome (黑白): 后接六個參數, 范圍 [-2, 3], 與photoshop一致。參數順序分別為: red, green, blue, cyan, magenta, yellow
sharpen (銳化): 后接一個參數 intensity, 范圍 [0, 10], 當intensity為0時無效果 blur (模糊): 后接一個參數 intensity, 范圍 [0, 1], 當 intensity 為0時無效果
whitebalance (白平衡): 后接兩個參數 temperature (范圍:[-1, 1], 0為無效果) 和 tint (范圍: [0, 5], 1 為無效果)
shadowhighlightshl: 后接兩個參數 shadow(范圍: [-200, 100], 0為無效果) 和 highlight(范圍: [-100, 200], 0為無效果)
hsv : 后接六個參數red, green, blue, magenta, yellow, cyan. 六個參數范圍均為 [-1, 1] hsl : 后接三個參數hue, saturation, luminance, 三個參數范圍均為 [-1, 1]
level (色階): 后接三個參數 dark, light, gamma, 范圍均為[0, 1], 其中 dark < light
exposure (曝光) : 后接一個參數 intensity, 范圍 [-10, 10]
colorbalance (色彩平衡): 后接三個參數 redShift [-1, 1], greenShift [-1, 1], blueShift [-1, 1]. (添加日期: 2015-3-30)
注: [] 中的表示該值的縮寫,可以使用縮寫代替原本過長的參數值。 <arg> 表示該方法所需的參數,具體范圍請參考相關class。 <arg>的個數與具體<function>有關,
-
cvlomo方法參數解釋: @cvlomo方法包含了子方法curve。格式 "@cvlomo <vignetteStart> <vignetteEnd> <colorScaleLow> <colorScaleRange> <saturation> <curve>" <vignetteStart>和<vignetteEnd>均為大于0的小數,一般小于1。 <colorScaleLow> <colorScaleRange> 均為大于0的小數,一般小于1。 用于調整圖像 <saturation> 0~1之間的小數, 設置圖像飽和度。 參數<curve> 為一個完整的curve方法,但是不添加@curve 標記。 例: "@cvlomo 0.2 0.8 0.1 0.2 1 RGB(0, 0) (255, 255)"
-
colorscale方法參數解釋: @colorscale方法格式為 "@colorscale <low> <range> <saturation>" 注: colorscale方法需要進行CPU計算,較影響速度。
-
vignette 方法參數解釋: @vignette方法格式為 "@vignette <low> <range> <centerX> <centerY> 注: 其中low和range是必須選項,centerX和centerY是可選項,若不填,則默認為0.5。 centerX和centerY必須同時存在才生效。 例: "@vignette 0.1 0.9" , "@vignette 0.1 0.9 0.5 0.5"
-
colormul 方法參數解釋: @colormul方法格式為 "@colormul <function> <arg1> ...<argN>" 參數<function>值目前有 "flt", "vec" 和 "mat"。 當<function>為flt時, 后面跟一個參數 <arg>,將對所有像素執行乘法. 當<function>為vec時,后面跟三個參數<arg1> <arg2> <arg3>,將對所有像素分別執行rgb分量各自相乘。 當<function>為mat時,后面跟九個參數<arg1>...<argN>,將對所有像素分別執行矩陣的rgb分量進行矩陣乘法。
-
special方法參數解釋: @special方法格式為 "@special <N>" 其中參數<N> 為該特效的編號。 此類用于處理所有不具備通用性的特效。直接重新編寫一個processor以解決。
-
lomo方法參數解釋:格式 "@lomo <vignetteStart> <vignetteEnd> <colorScaleLow> <colorScaleRange> <saturation> <isLinear>" <vignetteStart>和<vignetteEnd>均為大于0的小數,一般小于1。 <colorScaleLow> <colorScaleRange> 均為大于0的小數,一般小于1。 用于調整圖像 <saturation> 0~1之間的小數, 設置圖像飽和度。 <isLinear> 0或1, 設置所使用的vignette方法是否為線性增長,不寫此參數則默認為0 例: "@lomo 0.2 0.8 0.1 0.2 1 0"
======編號13 以前使用到的特效依賴庫版本: 0.2.1.x =========
- vigblend 方法參數解釋: @vigblend方法格式為 "@vigblend <function> <color> <intensity> <low> <range> <centerX> <centerY> [kind]" [isLinear] 參數為可選參數, 默認為0 0: 線性增強,vignette本身不包含alpha通道(alpha通道為1) 1: 線性增強,vignette本身以alpha通道形成漸變 2: 二次增強,vignette本身不包含alpha通道(alpha通道為1) 3: 二次增強,vignette本身以alpha通道形成漸變 例:"@vigblend ol 0 0 0 1 50 0.02 0.45 0.5 0.5 0" "@vigblend mix 10 10 30 255 100 0 1.5 0.5 0.5 0", "@vigblend mix 10 10 30 255 100 0 1.5 0.5 0.5 1", "@vigblend mix 10 10 30 255 100 0 1.5 0.5 0.5 2", "@vigblend mix 10 10 30 255 100 0 1.5 0.5 0.5 3", 注:其他參數含義以及用法參考 pixblend 方法以及 vignette 方法。
======↑此注釋以上編號使用的特效庫依賴版本 0.3.2.1
- selcolor (selective color) 方法參數解釋: @selcolor方法格式:"@selcolor <color1> <colorargs1> ...<colorN> <colorargsN>" 其中<colorN>為選擇的顏色, 有效參數包括: red, green, blue, cyan, magenta, yellow, white, gray, black.
<colorargsN> 為對選擇顏色所做出的調整, 格式為 (cyan, magenta, yellow, key) 范圍: [-1, 1] 每一個<colorargsN> 為使用括號括起來的四個參數, 如果該參數未作調整, 則寫0
======↑新增加 2014-11-12
- style 方法參數解釋: @style 方法格式為 "@style <function> <arg1> ... <argN>" <function>值目前有
crosshatch (交叉陰影): 后接兩個參數 spacing 范圍[0, 0.1] 和 lineWidth 范圍(0, 0.01]
edge (sobel查找邊緣): 后接兩個參數 mix 范圍[0, 1] 和 stride 范圍(0, 5]
emboss (浮雕): 后接三個參數 mix 范圍[0, 1], stride 范圍[1, 5] 和 angle 范圍[0, 2π]
halftone (半調): 后接一個參數 dotSize 范圍 >= 1
haze (霧): 后接三個參數 distance 范圍[-0.5, 0.5], slope 范圍 [-0.5, 0.5] 和 color (參數 color包含三個分量, 分別表示r, g, b, 范圍均為[0, 1] )
polkadot (圓點花樣): 后接一個參數 dotScaling 范圍 (0, 1]
sketch (素描): 后接一個參數 intensity [0, 1]
max (最大值) 暫無參數
min (最小值) 暫無參數
mid (中值) 暫無參數
======↑新增加 2015-2-5
- beautify 方法參數解釋: @beautify 方法格式為 "@beautify <function> <arg1>...<argN>"
<function>值 目前有
bilateral (雙邊濾波): 后接 三個參數 模糊半徑(blurScale) 范圍[-100, 100], 色彩容差(distanceFactor) 范圍[1, 20] 和 重復次數(repeat times) 范圍 >= 1 其中 重復次數為可選參數, 如果不填, 則默認為 1
======↑新增加 2015-3-19
- 新增功能性方法 unpack, 使用方式為 在整個配置的開頭加入 #unpack 作用: 將去除MultipleEffects包裝, 直接把解析出來的所有特效直接加入整個handler.
======↑新增加 2015-8-7
- blur 方法參數解釋 新增以 @blur 方法, 專門提供各類模糊算法, 格式: "@blur <function> <arg1> ... <argN>"
<function>值目前有
lerp (lerp blur): 后接兩個個參數 模糊級別[0, 1], 模糊基數 [0.6, 2.0]