core_image 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/core_image.rb +52 -25
- metadata +5 -5
data/lib/core_image.rb
CHANGED
@@ -1,30 +1,35 @@
|
|
1
|
+
# CORE IMAGE GEM
|
2
|
+
# Created by Spencer Rogers on January 24, 2012
|
3
|
+
# https://github.com/serogers
|
4
|
+
|
1
5
|
class CoreImage
|
2
6
|
require 'osx/cocoa'
|
3
7
|
|
4
|
-
# CORE IMAGE PROTOTYPE
|
5
|
-
# Created by Spencer Rogers on January 24, 2012
|
6
|
-
|
7
8
|
attr_accessor :image_path
|
8
9
|
attr_accessor :original_image
|
9
10
|
attr_accessor :ciimage
|
10
|
-
attr_accessor :bitmap
|
11
11
|
|
12
12
|
def initialize(object)
|
13
13
|
initialize_image(object)
|
14
14
|
end
|
15
15
|
|
16
|
-
def scale(ratio)
|
16
|
+
def scale(ratio = 1)
|
17
17
|
scaleFilter = OSX::CGAffineTransformMakeScale(ratio, ratio)
|
18
18
|
self.ciimage = self.ciimage.imageByApplyingTransform(scaleFilter)
|
19
19
|
self
|
20
|
-
end
|
20
|
+
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def scale_to_size(maximum = 500)
|
23
|
+
dimensions = size_to_fit_maximum(maximum)
|
24
|
+
scale(dimensions[:ratio])
|
25
|
+
end
|
26
|
+
|
27
|
+
def rotate(degrees = 0)
|
23
28
|
radians = degrees_to_radians(degrees)
|
24
29
|
transform = OSX::CGAffineTransformMakeRotation(radians)
|
25
30
|
self.ciimage = self.ciimage.imageByApplyingTransform(transform)
|
26
31
|
self
|
27
|
-
end
|
32
|
+
end
|
28
33
|
|
29
34
|
def flip_horizontal
|
30
35
|
transform = OSX::CGAffineTransformMakeScale(-1.0, 1.0)
|
@@ -38,14 +43,28 @@ class CoreImage
|
|
38
43
|
self
|
39
44
|
end # crop
|
40
45
|
|
41
|
-
def tint(
|
42
|
-
|
46
|
+
def tint(rgb_string)
|
47
|
+
image_size = size
|
48
|
+
context = create_ci_context(image_size[:width], image_size[:height])
|
43
49
|
colored_image = OSX::CIImage.imageWithColor(OSX::CIColor.colorWithString(rgb_string))
|
44
50
|
filter = OSX::CIFilter.filterWithName("CIMultiplyCompositing")
|
45
51
|
filter.setValue_forKey(colored_image, "inputImage")
|
46
52
|
filter.setValue_forKey(self.ciimage, "inputBackgroundImage")
|
47
53
|
new_image = filter.valueForKey("outputImage")
|
48
|
-
new_image.drawAtPoint_fromRect_operation_fraction(OSX::
|
54
|
+
new_image.drawAtPoint_fromRect_operation_fraction(OSX::NSZeroPoint, OSX::NSRectFromCGRect(new_image.extent), OSX::NSCompositeCopy, 1.0)
|
55
|
+
self.ciimage = new_image
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
def overlay_image(object)
|
60
|
+
image = open_object(object)
|
61
|
+
image_size = size
|
62
|
+
context = create_ci_context(image_size[:width], image_size[:height])
|
63
|
+
filter = OSX::CIFilter.filterWithName("CISourceOverCompositing")
|
64
|
+
filter.setValue_forKey(image, "inputImage")
|
65
|
+
filter.setValue_forKey(self.ciimage, "inputBackgroundImage")
|
66
|
+
new_image = filter.valueForKey("outputImage")
|
67
|
+
new_image.drawAtPoint_fromRect_operation_fraction(OSX::NSZeroPoint, OSX::NSRectFromCGRect(new_image.extent), OSX::NSCompositeCopy, 1.0)
|
49
68
|
self.ciimage = new_image
|
50
69
|
self
|
51
70
|
end
|
@@ -66,7 +85,7 @@ class CoreImage
|
|
66
85
|
width, height = 0, 0
|
67
86
|
|
68
87
|
begin # sometimes ciimage.extent throws an error
|
69
|
-
size = self.
|
88
|
+
size = self.ciimage.extent.size
|
70
89
|
width = size.width
|
71
90
|
height = size.height
|
72
91
|
rescue
|
@@ -84,6 +103,14 @@ class CoreImage
|
|
84
103
|
{:width => width, :height => height}
|
85
104
|
end
|
86
105
|
|
106
|
+
def size_to_fit_maximum(max = 500)
|
107
|
+
image_size = size
|
108
|
+
width = image_size[:width].to_f
|
109
|
+
height = image_size[:height].to_f
|
110
|
+
ratio = width > height ? max.to_f / width : max.to_f / height rescue 1
|
111
|
+
{:width => (width * ratio).to_i, :height => (height * ratio).to_i, :ratio => ratio}
|
112
|
+
end
|
113
|
+
|
87
114
|
def revert
|
88
115
|
self.ciimage = self.original_image
|
89
116
|
self
|
@@ -97,21 +124,21 @@ class CoreImage
|
|
97
124
|
private
|
98
125
|
|
99
126
|
def initialize_image(object)
|
127
|
+
self.ciimage = open_object(object)
|
128
|
+
self.image_path = object if object.class == String
|
100
129
|
|
130
|
+
# remember the original image for reversion
|
131
|
+
if self.ciimage
|
132
|
+
self.original_image = self.ciimage
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def open_object(object)
|
101
137
|
case object.class.to_s
|
102
138
|
when "String"
|
103
|
-
|
104
|
-
if File.extname(object).downcase == ".pdf"
|
105
|
-
self.ciimage = open_from_pdf_path(object)
|
106
|
-
else
|
107
|
-
self.ciimage = open_from_path(object)
|
108
|
-
end
|
139
|
+
ciimage = File.extname(object).downcase == ".pdf" ? open_from_pdf_path(object) : open_from_path(object)
|
109
140
|
when "OSX::CIImage"
|
110
|
-
|
111
|
-
end
|
112
|
-
|
113
|
-
if self.ciimage
|
114
|
-
self.original_image = self.ciimage
|
141
|
+
ciimage = object
|
115
142
|
end
|
116
143
|
end
|
117
144
|
|
@@ -179,8 +206,8 @@ class CoreImage
|
|
179
206
|
end
|
180
207
|
|
181
208
|
def create_ns_context(width, height)
|
182
|
-
|
183
|
-
context = OSX::NSGraphicsContext.graphicsContextWithBitmapImageRep(
|
209
|
+
blank_bitmap = OSX::NSBitmapImageRep.alloc.initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bytesPerRow_bitsPerPixel(nil, width, height, 8, 4, true, false, OSX::NSDeviceRGBColorSpace, 0, 0)
|
210
|
+
context = OSX::NSGraphicsContext.graphicsContextWithBitmapImageRep(blank_bitmap)
|
184
211
|
OSX::NSGraphicsContext.setCurrentContext(context)
|
185
212
|
context
|
186
213
|
end # createContext
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: core_image
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Spencer Rogers
|
@@ -19,7 +19,7 @@ date: 2012-01-24 00:00:00 -08:00
|
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
22
|
-
description:
|
22
|
+
description: Simple image manipulation using Apple's Core Image technology. Scale, rotate, flip, convert, overlay, and more.
|
23
23
|
email: SpencerRogers@gmail.com
|
24
24
|
executables: []
|
25
25
|
|
@@ -57,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
57
57
|
- 0
|
58
58
|
version: "0"
|
59
59
|
requirements:
|
60
|
-
- Mac OS X
|
60
|
+
- - Mac OS X
|
61
61
|
rubyforge_project:
|
62
62
|
rubygems_version: 1.5.3
|
63
63
|
signing_key:
|