pixel_curtain 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,20 @@
1
+ Pixel Curtain is a Gem and Utility to generate beautiful patterns from images:
2
+
3
+ ![Pixel Curtain](http://dl.dropbox.com/u/59591/pixel_curtain.png)
4
+
5
+ Installation
6
+ ------------
7
+
8
+ First install the pixel_curtain gem:
9
+
10
+ gem install pixel_curtain
11
+
12
+ That's it! You're in business now. You can try out the command line tool by doing
13
+
14
+ pixel_curtain input.png
15
+
16
+ Then look for the output.png file
17
+
18
+ Credits
19
+ -------
20
+ Pixel Curtain is written by [Nick Rowe](http://dcxn.com). Fork it and do something cool!
data/bin/pixel_curtain ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ dir = File.expand_path(File.dirname(__FILE__))
4
+ require dir + '/../lib/pixel_curtain'
5
+
6
+ input_file = ARGV[0]
7
+
8
+ if input_file.nil?
9
+ puts "input file required"
10
+ else
11
+ curtain = PixelCurtain::Curtain.new(input_file)
12
+ curtain.process(20)
13
+ curtain.save("output.png")
14
+ end
@@ -0,0 +1,30 @@
1
+ module PixelCurtain
2
+ class Curtain
3
+ def initialize(file_name)
4
+ @source_image = ChunkyPNG::Image.from_file(file_name)
5
+ @output = ChunkyPNG::Image.new(1440,900)
6
+ end
7
+
8
+ def process(number_of_divisions=10)
9
+
10
+ if (number_of_divisions > @source_image.dimension.width)
11
+ number_of_divisions = @source_image.dimension.width
12
+ end
13
+
14
+ source_division_size = @source_image.dimension.width / number_of_divisions
15
+ destination_division_size = @output.dimension.width / number_of_divisions
16
+
17
+ (0...number_of_divisions).each do |x|
18
+ avgPixel = @source_image.crop(source_division_size*x,0,
19
+ source_division_size,@source_image.dimension.height).average_pixel
20
+ @output.setPixelBlock(x*destination_division_size,0,@output.dimension.height,destination_division_size,avgPixel)
21
+ end
22
+ @output
23
+ end
24
+
25
+ def save(file_name)
26
+ @output.save(file_name)
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ class ChunkyPNG::Image
2
+ def average_pixel
3
+ # Sum the total R, G, and B pieces
4
+ ave = self.pixels.inject([0,0,0]) do |sum,element|
5
+ sum[0] += ChunkyPNG::Color.r(element)
6
+ sum[1] += ChunkyPNG::Color.g(element)
7
+ sum[2] += ChunkyPNG::Color.b(element)
8
+ sum
9
+ end
10
+ # Cache the pixel_count value for speed
11
+ pixel_count = self.pixels.count
12
+ # Return the average value of each component as a new Color
13
+ ChunkyPNG::Color.rgb(ave[0] / pixel_count, ave[1] / pixel_count, ave[2] / pixel_count)
14
+ end
15
+
16
+ def setPixelBlock(startX, startY, height, width, newPixel)
17
+ (startX...startX+width).each do |x|
18
+ (startY...startY+height).each do |y|
19
+ self[x,y] = newPixel
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module PixelCurtain
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: pixel_curtain
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Nick Rowe
@@ -17,8 +17,8 @@ dependencies: []
17
17
  description: Generate beautiful backgrounds from images
18
18
  email:
19
19
  - nixterrimus@dcxn.com
20
- executables: []
21
-
20
+ executables:
21
+ - pixel_curtain
22
22
  extensions: []
23
23
 
24
24
  extra_rdoc_files: []
@@ -26,8 +26,12 @@ extra_rdoc_files: []
26
26
  files:
27
27
  - .gitignore
28
28
  - Gemfile
29
+ - README.md
29
30
  - Rakefile
31
+ - bin/pixel_curtain
30
32
  - lib/pixel_curtain.rb
33
+ - lib/pixel_curtain/curtain.rb
34
+ - lib/pixel_curtain/image.rb
31
35
  - lib/pixel_curtain/version.rb
32
36
  - pixel_curtain.gemspec
33
37
  has_rdoc: true