pixelholder 1.2.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01f0af092e87d716caf44085c98991119fab6b91
4
- data.tar.gz: 922cf6c7119bdfab98afa05307525a9eb8d3c8c7
3
+ metadata.gz: 420138d75edecfce1cfd55e625ab142ed917b9ef
4
+ data.tar.gz: 09503b49fd4499af8570f588a8c39344d225218c
5
5
  SHA512:
6
- metadata.gz: d83655eb5e1b121c025439e0882b0901fbd9f6c9c47b90273955bcd7fe23ab7c4700d70737544da75d17ac5d40316644dcefd4392cbb8e043c74ddf6fcb618d2
7
- data.tar.gz: 61c9712b1e8dec37ddf92bf1859cd0c64a93c5c7593a021dd2e120b400817dfc97d952c106c4b1700cc6df5cd2bcdad18fd6800cf85a11ea7e93dc26e1fdd479
6
+ metadata.gz: eba31db1645f3b19da4d822850ca414ec69f62547e44793156101386fd06d5dce610c7479599e11910fac240a5a97bb07f484607790ec85a49ff908216e304bf
7
+ data.tar.gz: 2d4fbe873c8c1743cc21d887d3393b51bca01ab98144ae78883b3d61dbcaf79c78917b4fabaa8674c47f09a864c0f03da09b835f4ba7cb11cfc16f6fa794bac4
@@ -1,161 +1,8 @@
1
1
  # pixelholder.rb
2
2
 
3
- require 'rubygems'
4
- require 'flickr_fu'
5
- require 'RMagick'
3
+ require "rubygems"
6
4
 
7
- class PixelHolder
8
-
9
- # Initialize the object
10
- def initialize(subject, dimensions, flickr_config_path = nil, extra_options = Hash.new(false))
11
- # In case we ever decide to allow extra formats for whatever reason
12
- @image_format = extra_options[:image_format] ? extra_options[:image_format] : 'jpg'
13
-
14
- # Set image dimensions values
15
- if is_numeric(dimensions)
16
- @width = @height = dimensions.to_i
17
- else
18
- dimensions = dimensions.downcase.split('x')
19
- default_dimension = 200
20
-
21
- @width = dimensions[0].to_i
22
-
23
- if dimensions[1].nil? then @height = @width
24
- else
25
- @height = dimensions[1].to_i
26
- if(@height == 0) then @height = default_dimension end
27
- end
28
- end
29
-
30
- # Create image with background
31
- subject = subject.downcase.split(':')
32
- background_type = subject[0] if subject.length > 1
33
-
34
- case background_type
35
- when 'color'
36
- generate_canvas(subject[1])
37
- when 'gradient'
38
- gradient_colors = subject[1].split(',')
39
-
40
- if gradient_colors[2].nil? || gradient_colors[2] == 'v'
41
- end_x = @width
42
- end_y = 0
43
- else
44
- end_x = 0
45
- end_y = @height
46
- end
47
-
48
- fill_content = Magick::GradientFill.new(0, 0, end_x, end_y, get_hex(gradient_colors[0]), get_hex(gradient_colors[1]))
49
-
50
- generate_canvas('000', fill_content)
51
- else
52
- seed = extra_options[:seed] ? extra_options[:seed].to_i : 0
53
-
54
- flickr_config_path = flickr_config_path ? flickr_config_path : 'config/flickr.yml'
55
-
56
- flickr = Flickr.new(flickr_config_path)
57
-
58
- # Grab all images with Creative Commons licencing
59
- photos = flickr.photos.search(:tags => subject[0], :tag_mode => 'all', :license => '4,5,6,7', :media => 'photo')
60
- photo = photos[seed]
61
-
62
- generate_canvas()
63
-
64
- unless photo.nil?
65
- image_background = Magick::ImageList.new
66
- image_url = open(photo.url(:large))
67
- image_format = @image_format
68
-
69
- # Read the Flickr image as a blob
70
- image_background.from_blob(image_url.read) do
71
- self.format = image_format
72
- self.quality = 100
73
- end
74
-
75
- # Make the image meet the dimensions
76
- image_background.resize_to_fill!(@width, @height)
77
- @canvas.composite!(image_background, Magick::CenterGravity, Magick::CopyCompositeOp)
78
- end
79
- end
80
-
81
- # Text overlay
82
- if extra_options[:text]
83
- generate_overlay_text(extra_options[:text], extra_options[:text_color])
84
- end
85
-
86
- end
87
-
88
- # Test if a value is numeric
89
- def is_numeric(value)
90
- true if Integer(value) rescue false
91
- end
92
-
93
- # Returns a blob string of the generated image
94
- def get_blob
95
- @canvas.to_blob
96
- end
97
-
98
- # Returns a hex color code
99
- def get_hex(color)
100
- "##{generate_color(color).downcase}"
101
- end
102
-
103
- # Returns the appropriate color code string
104
- def generate_color(color)
105
- return color.ljust(6, color) if (1..2).include?(color.length)
106
- return color.scan(/((.))/).flatten.join if color.length == 3
107
- return color.ljust(6, '0') if (4..5).include?(color.length)
108
- return color[0..5] if color.length > 6
109
- return color
110
- end
111
-
112
- # Generates an Imagick canvas
113
- def generate_canvas(background = '000', fill_content = nil)
114
- background = get_hex(background)
115
- image_format = @image_format
116
-
117
- if fill_content.nil?
118
- @canvas = Magick::Image.new(@width, @height) do
119
- self.background_color = background
120
- self.format = image_format
121
- end
122
- else
123
- @canvas = Magick::Image.new(@width, @height, fill_content) do
124
- self.format = image_format
125
- end
126
- end
127
- end
128
-
129
- # Add a text overlay to the image
130
- def generate_overlay_text(string, color = false)
131
- if string == 'add_dimensions' then string = "#{@width} #{215.chr} #{@height}" end
132
-
133
- overlay_text = string
134
- overlay = Magick::Draw.new
135
-
136
- overlay.fill = color ? get_hex(color) : get_hex('fff')
137
- overlay.stroke = "rgba(0,0,0,0.15)"
138
- overlay.stroke_width = 20
139
- overlay.font_weight = Magick::BoldWeight
140
- overlay.pointsize = 500
141
- overlay.gravity = Magick::CenterGravity
142
- overlay.interline_spacing = -500
143
-
144
- font_size = overlay.get_type_metrics(overlay_text)
145
-
146
- overlay_canvas = Magick::Image.new(font_size.width, font_size.height) do
147
- self.background_color = 'transparent'
148
- end
149
-
150
- overlay.annotate(overlay_canvas, 0, 0, 0, 0, overlay_text)
151
-
152
- overlay_height = @height * 0.8
153
-
154
- overlay_canvas.resize_to_fit!(@width * 0.8, overlay_height)
155
-
156
- @canvas.composite!(overlay_canvas, Magick::CenterGravity, Magick::OverCompositeOp)
157
- end
158
-
159
- private :generate_canvas, :generate_overlay_text
160
-
161
- end
5
+ require "pixelholder/base"
6
+ require "pixelholder/fill"
7
+ require "pixelholder/gradient"
8
+ require "pixelholder/flickr"
@@ -0,0 +1,78 @@
1
+ require "RMagick"
2
+
3
+ module PixelHolder
4
+ def self.base
5
+ Base.new
6
+ end
7
+ end
8
+
9
+ class PixelHolder::Base
10
+
11
+ attr_reader :canvas, :width, :height, :image_format
12
+
13
+ def initialize(options = {})
14
+ @options = options
15
+ set_options
16
+ end
17
+
18
+ private
19
+
20
+ def set_options
21
+ @width = @options[:width].to_i || 800
22
+ @height = @options[:height].to_i || 600
23
+ @image_format = @options[:image_format] || "jpg"
24
+ end
25
+
26
+ def generate_canvas(fill = nil)
27
+ background_color = @options[:background_color] || "#ffffff"
28
+ image_format = @image_format
29
+
30
+ unless fill.nil?
31
+ @canvas = Magick::Image.new(@width, @height, fill) do
32
+ self.background_color = background_color
33
+ self.format = image_format
34
+ end
35
+ else
36
+ @canvas = Magick::Image.new(@width, @height) do
37
+ self.background_color = background_color
38
+ self.format = image_format
39
+ end
40
+ end
41
+
42
+ add_text_overlay
43
+ end
44
+
45
+ def add_text_overlay
46
+ unless @options[:text].nil?
47
+ if @options[:text] == "show_dimensions"
48
+ overlay_text = "#{@width} #{215.chr} #{@height}"
49
+ else
50
+ overlay_text = @options[:text]
51
+ end
52
+
53
+ overlay = Magick::Draw.new
54
+
55
+ overlay.fill = @options[:text_color] || '#ffffff'
56
+ overlay.stroke = "rgba(0,0,0,0.15)"
57
+ overlay.stroke_width = 20
58
+ overlay.font_weight = Magick::BoldWeight
59
+ overlay.pointsize = 500
60
+ overlay.gravity = Magick::CenterGravity
61
+ overlay.interline_spacing = -500
62
+
63
+ font_size = overlay.get_type_metrics(overlay_text)
64
+
65
+ overlay_canvas = Magick::Image.new(font_size.width, font_size.height) do
66
+ self.background_color = 'transparent'
67
+ end
68
+
69
+ overlay.annotate(overlay_canvas, 0, 0, 0, 0, overlay_text)
70
+
71
+ overlay_height = @height * 0.8
72
+
73
+ overlay_canvas.resize_to_fit!(@width * 0.8, overlay_height)
74
+
75
+ @canvas.composite!(overlay_canvas, Magick::CenterGravity, Magick::OverCompositeOp)
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,6 @@
1
+ class PixelHolder::Fill < PixelHolder::Base
2
+ def initialize(options = {})
3
+ super
4
+ generate_canvas
5
+ end
6
+ end
@@ -0,0 +1,52 @@
1
+ require 'flickraw'
2
+ require 'open-uri'
3
+
4
+ class PixelHolder::Flickr < PixelHolder::Base
5
+
6
+ private
7
+
8
+ def set_options
9
+ super
10
+ add_photo
11
+ end
12
+
13
+ def add_photo
14
+ seed = if @options[:seed] then @options[:seed].to_i else 0 end
15
+
16
+ FlickRaw.api_key = @options[:flickr_key]
17
+ FlickRaw.shared_secret = @options[:flickr_secret]
18
+
19
+ photos = flickr.photos.search(
20
+ tags: @options[:flickr_tags],
21
+ tag_mode: 'all'
22
+ )
23
+
24
+ photo_id = photos[seed].id
25
+ photo_sizes = flickr.photos.getSizes(photo_id: photo_id)
26
+
27
+ # Get the largest image
28
+ photo_original_url = photo_sizes[-1].source
29
+
30
+ unless photo_original_url.nil?
31
+ image_background = Magick::ImageList.new
32
+ image_url = open(photo_original_url)
33
+ image_format = @image_format
34
+
35
+ image_background.from_blob(image_url.read) do
36
+ self.format = image_format
37
+ self.quality = 100
38
+ end
39
+
40
+ image_background.resize_to_fill!(@width, @height)
41
+
42
+ generate_canvas
43
+
44
+ @canvas.composite!(image_background, Magick::CenterGravity, Magick::CopyCompositeOp)
45
+ end
46
+
47
+ if @options[:text]
48
+ add_text_overlay
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,22 @@
1
+ class PixelHolder::Gradient < PixelHolder::Base
2
+
3
+ private
4
+
5
+ def set_options
6
+ super
7
+ add_gradient
8
+ end
9
+
10
+ def add_gradient
11
+ direction = @options[:direction] || "vertical"
12
+ start_color = @options[:start_color] || "#ffffff"
13
+ end_color = @options[:end_color] || "#0099cc"
14
+
15
+ end_x = if direction == "vertical" then @width else 0 end
16
+ end_y = if direction == "vertical" then 0 else @height end
17
+
18
+ fill = Magick::GradientFill.new(0, 0, end_x, end_y, start_color, end_color)
19
+
20
+ generate_canvas(fill)
21
+ end
22
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pixelholder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Dingli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-18 00:00:00.000000000 Z
11
+ date: 2014-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: flickr_fu
14
+ name: flickraw
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.2
19
+ version: 0.9.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.2
26
+ version: 0.9.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rmagick
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -45,6 +45,10 @@ extensions: []
45
45
  extra_rdoc_files: []
46
46
  files:
47
47
  - lib/pixelholder.rb
48
+ - lib/pixelholder/base.rb
49
+ - lib/pixelholder/fill.rb
50
+ - lib/pixelholder/flickr.rb
51
+ - lib/pixelholder/gradient.rb
48
52
  homepage: http://github.com/chrisdingli/pixelholder-rubygem
49
53
  licenses:
50
54
  - MIT