pixelholder 1.2.3 → 2.0.0

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.
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