class UnderOs::Image::Filter
Attributes
image[R]
Public Class Methods
context()
click to toggle source
shared EAGL context
# File lib/under_os/image/filter.rb, line 150 def self.context @context ||= begin gl_context = EAGLContext.alloc.initWithAPI(KEAGLRenderingAPIOpenGLES2) options = {KCIContextWorkingColorSpace => nil} CIContext.contextWithEAGLContext(gl_context, options:options) end end
new(params={})
click to toggle source
# File lib/under_os/image/filter.rb, line 6 def initialize(params={}) self.params = params end
Private Class Methods
filter_for(name, params)
click to toggle source
# File lib/under_os/image/filter.rb, line 185 def self.filter_for(name, params) @filters_cache ||= {} @filters_cache[name] ||= CIFilter.filterWithName(name.to_s) filter = @filters_cache[name] filter.setDefaults params.each do |key, value| filter.setValue(value, forKey: key.to_s) end filter end
Public Instance Methods
apply()
click to toggle source
# File lib/under_os/image/filter.rb, line 20 def apply UnderOs::Image.new(render) end
apply_to(image)
click to toggle source
# File lib/under_os/image/filter.rb, line 10 def apply_to(image) self.image = image apply end
aspect_ratio=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 118 def aspect_ratio=(value) add_filter :CILanczosScaleTransform, inputAspectRatio: value end
brightness=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 42 def brightness=(value) # 0.0 +/- 0.25 add_filter :CIColorControls, inputBrightness: value end
contrast=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 46 def contrast=(value) # 1.0 +/- 0.25 add_filter :CIColorControls, inputContrast: value end
crop=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 122 def crop=(value) add_filter :CICrop, inputRectangle: value end
exposure=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 50 def exposure=(value) # 0.0 +/- 0.25 add_filter :CIExposureAdjust, inputEV: value end
highlights=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 66 def highlights=(value) # 0 +/- 1.0 add_filter :CIToneCurve, inputPoint3: CIVector.vectorWithX(0.75, Y: 0.75 + (0.25 * value)) end
image=(image)
click to toggle source
# File lib/under_os/image/filter.rb, line 15 def image=(image) @image = CIImage.alloc.initWithImage( image.is_a?(UnderOs::Image) ? image._ : image) end
method_missing(name, *args, &block)
click to toggle source
Calls superclass method
# File lib/under_os/image/filter.rb, line 131 def method_missing(name, *args, &block) if respond_to?("#{name}=") @params[name.to_sym] else super end end
midtone=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 62 def midtone=(value) # 0 +/- 1.0 add_filter :CIToneCurve, inputPoint2: CIVector.vectorWithX(0.5, Y: 0.5 + (0.25 * value)) end
mono_color=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 102 def mono_color=(value) # CIColor.colorWithRed(value, green:value, blue:value, alpha:1.0) add_filter :CIColorMonochrome, inputColor: value end
mono_intensity=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 106 def mono_intensity=(value) add_filter :CIColorMonochrome, inputIntensity: value end
params()
click to toggle source
# File lib/under_os/image/filter.rb, line 24 def params @params ||= {} end
params=(params)
click to toggle source
# File lib/under_os/image/filter.rb, line 28 def params=(params) @params = {} # original param values @filters = {} params.each do |key, value| @params[key.to_sym] = value self.__send__ "#{key}=", value end end
pixellate_center=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 98 def pixellate_center=(value) add_filter :CIPixellate, inputCenter: value end
pixellate_scale=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 94 def pixellate_scale=(value) add_filter :CIPixellate, inputScale: value end
posterize=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 110 def posterize=(value) add_filter :CIColorPosterize, inputLevels: value end
render(image=@image)
click to toggle source
# File lib/under_os/image/filter.rb, line 139 def render(image=@image) image = CIImage.alloc.initWithImage(image.is_a?(UnderOs::Image) ? image._ : image) if image != @image image = apply_filters_to(image) cg_image = UnderOs::Image::Filter.context.createCGImage(image, fromRect:image.extent) new_image = UIImage.imageWithCGImage(cg_image) CGImageRelease(cg_image) new_image end
saturation=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 38 def saturation=(value) # 1.0 +/- 0.25 add_filter :CIColorControls, inputSaturation: value end
scale=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 114 def scale=(value) add_filter :CILanczosScaleTransform, inputScale: value end
sepia=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 82 def sepia=(value) add_filter :CISepiaTone, inputIntensity: value end
shadows=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 58 def shadows=(value) # 0 +/- 1.0 add_filter :CIToneCurve, inputPoint1: CIVector.vectorWithX(0.2, Y: 0.2 + (0.25 * value)) end
sharpen=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 70 def sharpen=(value) # 0.5 +/- 0.5 add_filter :CIUnsharpMask, inputRadius: 1.5, inputIntensity: value end
straighten=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 126 def straighten=(value) add_filter :CIStraightenFilter, inputAngle: value end
temperature=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 74 def temperature=(value) # 6500 +/- 1500 add_filter :CITemperatureAndTint, inputTargetNeutral: CIVector.vectorWithX(value, Y:0) end
tint=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 78 def tint=(value) # 0.0 +/- 50 add_filter :CITemperatureAndTint, inputNeutral: CIVector.vectorWithX(6500, Y:-(value)) end
vibrance=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 54 def vibrance=(value) # 0.0 +/- 0.25 add_filter :CIVibrance, inputAmount: value end
vignette_intensity=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 90 def vignette_intensity=(value) # 1.0 +/- 1.0 add_filter :CIVignette, inputIntensity: value end
vignette_radius=(value)
click to toggle source
# File lib/under_os/image/filter.rb, line 86 def vignette_radius=(value) # 1.0 +/- 0.5 add_filter :CIVignette, inputRadius: value end
Protected Instance Methods
apply_filters_to(image)
click to toggle source
# File lib/under_os/image/filter.rb, line 160 def apply_filters_to(image) @filters.each do |name, filter| if filter.is_a?(Proc) image = instance_exec image, &filter else filter = self.class.filter_for(name, filter) filter.setValue(image, forKey: 'inputImage') image = filter.outputImage filter.setValue(nil, forKey: 'inputImage') end end image end
Private Instance Methods
add_filter(name, values={})
click to toggle source
# File lib/under_os/image/filter.rb, line 177 def add_filter(name, values={}) @filters[name] ||= {} values.each do |key, value| @filters[name][key] = value end end