collagist 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/collagist.rb +107 -0
  3. metadata +84 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 716f5e47630a5448378fe5cded457bf85dd99067
4
+ data.tar.gz: abcac1ecde9fa13f69b4290368bac5b2f57518a9
5
+ SHA512:
6
+ metadata.gz: 7ac1ec374c8770aaa27cd32ecfd838e17c1f1739de394427b79937c902e57ee1c5104e3afa01d4f54b62d4157b233203be374f0ff75b93bbcd4018d1b88d50e2
7
+ data.tar.gz: 9dc028059a609f0d40b7a4e1a3855492d47f03954ae7b6f33e48bc64281c2d7b226ce16518d92a1925ce677decedf2a42d31aeb2c16728b3bdc6c6bae6d43efb
@@ -0,0 +1,107 @@
1
+ require 'RMagick'
2
+
3
+ class Collagist
4
+ attr_accessor :outfile, :max_width, :border_width, :background_colour
5
+
6
+ def initialize
7
+ @outfile = "out.png"
8
+ @max_width = 1200
9
+ @right_most_point = 0
10
+ @border_width = 2
11
+ @background_colour = "#333"
12
+ end
13
+
14
+ def build_from_folder(path)
15
+ @images = Dir[path]
16
+ build
17
+ end
18
+
19
+ def build_from_filenames(paths_array)
20
+ @images = paths_array
21
+ build
22
+ end
23
+
24
+ private
25
+ def build
26
+ @new_image_height = get_mean_height
27
+ prepare_canvas
28
+
29
+ x_off, row = 0, 0
30
+
31
+ # Handle entries one by one
32
+ @images.sort.each do |entry|
33
+ content = File.open(entry).read
34
+
35
+ img = Magick::Image::from_blob(content)[0]
36
+
37
+ width = img.columns
38
+ height = img.rows
39
+
40
+ # scale old image to new height
41
+ factor = @new_image_height.to_f / height
42
+ new_image_width = (width * factor).to_i
43
+
44
+ img = img.resize_to_fill!(new_image_width, @new_image_height)
45
+
46
+ # add it to canvas
47
+ if x_off + new_image_width + @border_width > @max_width
48
+ row += 1
49
+ x_off = 0
50
+ end
51
+
52
+ required_height = ((row + 1) * @new_image_height + (row + 1) * @border_width + @border_width).ceil.to_i
53
+
54
+ if @canvas.rows < required_height
55
+ @canvas = @canvas.extent(@max_width, required_height)
56
+ end
57
+
58
+ @canvas.composite!(
59
+ img,
60
+ x_off + @border_width,
61
+ (row*@new_image_height + (row+1)*@border_width).to_i,
62
+ Magick::OverCompositeOp
63
+ )
64
+
65
+ x_off += new_image_width + @border_width
66
+
67
+ if x_off > @right_most_point
68
+ @right_most_point = x_off
69
+ end
70
+
71
+ img.destroy!
72
+ GC.start
73
+ end
74
+
75
+ trim_image
76
+
77
+ outfile = File.open(@outfile, 'w')
78
+ outfile.write(@canvas.to_blob)
79
+ outfile.close
80
+ end
81
+
82
+ def prepare_canvas
83
+ @canvas = Magick::Image.new(@max_width, 1)
84
+ @canvas.color_reset!(@background_colour.to_s)
85
+ @canvas.background_color = @background_colour.to_s
86
+ @canvas.format = "JPEG"
87
+ end
88
+
89
+ def get_mean_height
90
+ total = 0
91
+ @images.each do |entry|
92
+ content = File.open(entry).read
93
+ image = Magick::Image::from_blob(content)[0]
94
+ total += image.rows
95
+ end
96
+ new_height = (total / @images.size).to_i
97
+ new_height = [300, new_height].min
98
+ return new_height
99
+ end
100
+
101
+ def trim_image
102
+ @canvas.resize_to_fill!(
103
+ @right_most_point + @border_width,
104
+ @canvas.rows,
105
+ Magick::NorthWestGravity)
106
+ end
107
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: collagist
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - jsrn
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rmagick
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.13'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.13.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.13'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.13.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.1'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.1.0
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.1'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.1.0
53
+ description: Attractive tiling of images from a path name or array of filenames.
54
+ email: james.srn@gmail.com
55
+ executables: []
56
+ extensions: []
57
+ extra_rdoc_files: []
58
+ files:
59
+ - lib/collagist.rb
60
+ homepage: https://github.com/jsrn/collagist
61
+ licenses:
62
+ - MIT
63
+ metadata: {}
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubyforge_project:
80
+ rubygems_version: 2.4.5
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: Attractive image tiling.
84
+ test_files: []