image_mosaic 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -5
- data/lib/image_mosaic/data/background.rb +25 -0
- data/lib/image_mosaic/image/mosaic.rb +20 -0
- data/lib/image_mosaic/image/parent.rb +2 -2
- data/lib/image_mosaic/operations/construct.rb +28 -0
- data/lib/image_mosaic/railtie.rb +4 -0
- data/lib/image_mosaic/version.rb +1 -1
- data/lib/image_mosaic.rb +10 -25
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16c5f7ada72b064ecf1bef0bd89f7dc50dc28a28
|
4
|
+
data.tar.gz: 5da2b55388a4897099f432885488fe124601790b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df1829264594f547382597ca356919679b6a58ba9bd605a1da517e4bb29f219ea70dd03eca958ed637525086b4b59dd378a29a6348abc6b09a1080e565873973
|
7
|
+
data.tar.gz: 240a137ef6e4c0453dcb2df2d7e607cd8160b605c47ac1ce7fdc96c307a794f0d199d7faf979b8a093481f5b07dfefabdc54e18abe24c3f694077236658bed46
|
data/README.md
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# ImageMosaic
|
2
2
|
[![Build Status](https://travis-ci.org/Dannyguk/image_mosaic.svg?branch=master)](https://travis-ci.org/Dannyguk/image_mosaic)
|
3
3
|
|
4
|
-
ImageMosaic takes an array of
|
5
|
-
|
6
|
-
Each image in the collage is currently resized to 200x200 pixels. The image it returns in 1000x1000 pixels.
|
4
|
+
ImageMosaic takes an array of images and returns a collage of the images in a grid format.
|
7
5
|
|
8
6
|
## Installation
|
9
7
|
|
@@ -33,12 +31,35 @@ Or install it yourself as:
|
|
33
31
|
|
34
32
|
## Usage
|
35
33
|
|
36
|
-
Create an image from an array of image URLs.
|
34
|
+
Create an image from an array of image URLs.
|
35
|
+
|
36
|
+
The size of each piece of the final image and the number of columns and rows will vary depending on how many images are provided.
|
37
|
+
|
38
|
+
**Note**: the final image is fixed to 1000x1000 pixels with a white background.
|
39
|
+
|
40
|
+
An instance of a `Mosaic` object is returned, calling `save` on this will save the image to the filesystem with a random name.
|
37
41
|
|
38
42
|
```ruby
|
39
43
|
images = (0..20).map { 'https://unsplash.it/200/200?random' }
|
40
|
-
mosaic = ImageMosaic
|
44
|
+
mosaic = ImageMosaic.create(images)
|
41
45
|
mosaic.save
|
46
|
+
mosaic.filename
|
47
|
+
=> "mosaic_9ebfcb8c-b554-4748-9b2e-3d4eb7b8f2b0.png"
|
48
|
+
```
|
49
|
+
|
50
|
+
If you want to retrieve the instance of `MiniMagick::Image` behind and manipulate it further you can.
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
images = (0..20).map { 'https://unsplash.it/200/200?random' }
|
54
|
+
mosaic = ImageMosaic.create(images)
|
55
|
+
mosaic.image
|
56
|
+
=> #<MiniMagick::Image:0x007fbfb2a6b868 @path="/var/folders/7g/7wdhmvx96856frwy0jf78rsr0000gn/T/mini_magick20170426-64311-eom10b.png", @tempfile=#<Tempfile:/var/folders/7g/7wdhmvx96856frwy0jf78rsr0000gn/T/mini_magick20170426-64311-eom10b.png (closed)>, @info=#<MiniMagick::Image::Info:0x007fbfb2a6b818 @path="/var/folders/7g/7wdhmvx96856frwy0jf78rsr0000gn/T/mini_magick20170426-64311-eom10b.png", @info={}>>
|
57
|
+
```
|
58
|
+
### Background Colour
|
59
|
+
The default background colour is white, background colour can be specified as a valid hex code (with preceeding #). If an invalid code is provided the background will be white.
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
ImageMosaic.create(images, colour: '#00ff00')
|
42
63
|
```
|
43
64
|
|
44
65
|
## Contributing
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ImageMosaic
|
2
|
+
module Data
|
3
|
+
class Background
|
4
|
+
PATTERN = /^#([0-9a-fA-F]{3}){1,2}$/
|
5
|
+
|
6
|
+
def initialize(hex)
|
7
|
+
@hex = hex
|
8
|
+
end
|
9
|
+
|
10
|
+
def hex
|
11
|
+
valid? ? @hex : COLOUR
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def valid?
|
17
|
+
!!match
|
18
|
+
end
|
19
|
+
|
20
|
+
def match
|
21
|
+
@hex =~ PATTERN
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ImageMosaic
|
2
|
+
module Image
|
3
|
+
class Mosaic
|
4
|
+
attr_reader :image
|
5
|
+
|
6
|
+
def initialize(image)
|
7
|
+
@image = image
|
8
|
+
@securerandom = SecureRandom.uuid
|
9
|
+
end
|
10
|
+
|
11
|
+
def save
|
12
|
+
@image.write(filename)
|
13
|
+
end
|
14
|
+
|
15
|
+
def filename
|
16
|
+
"mosaic_#{@securerandom}.png"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -2,7 +2,7 @@ module ImageMosaic
|
|
2
2
|
module Image
|
3
3
|
#Takes an array of images and metrics and then returns a single image of composited images.
|
4
4
|
class Parent
|
5
|
-
def initialize(items, colour
|
5
|
+
def initialize(items, colour:, columns:, dimension:)
|
6
6
|
@items = items
|
7
7
|
@colour = colour
|
8
8
|
@columns = columns
|
@@ -20,7 +20,7 @@ module ImageMosaic
|
|
20
20
|
end
|
21
21
|
y += @dimension
|
22
22
|
end
|
23
|
-
image
|
23
|
+
Mosaic.new(image)
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ImageMosaic
|
2
|
+
module Operations
|
3
|
+
class Construct
|
4
|
+
def initialize(items, colour: COLOUR)
|
5
|
+
@items = items
|
6
|
+
@colour = colour
|
7
|
+
end
|
8
|
+
|
9
|
+
def parent
|
10
|
+
@parent ||= Image::Parent.new(valid_items, colour: @colour, columns: setting.columns, dimension: setting.dimension).create
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def setting
|
16
|
+
@setting ||= Data::Setting.new(valid_items.count)
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid_items
|
20
|
+
@valid_items ||= Data::Validator.new(@items).items
|
21
|
+
end
|
22
|
+
|
23
|
+
def background
|
24
|
+
@background ||= Data::Background.new(@colour).hex
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/image_mosaic/version.rb
CHANGED
data/lib/image_mosaic.rb
CHANGED
@@ -1,38 +1,23 @@
|
|
1
|
-
require
|
1
|
+
require 'image_mosaic/version'
|
2
2
|
require 'mini_magick'
|
3
3
|
require 'tempfile'
|
4
4
|
require 'securerandom'
|
5
|
-
require 'image_mosaic/
|
5
|
+
require 'image_mosaic/data/background'
|
6
6
|
require 'image_mosaic/data/setting'
|
7
7
|
require 'image_mosaic/data/validator'
|
8
|
-
require 'image_mosaic/image/parent'
|
9
8
|
require 'image_mosaic/image/child'
|
9
|
+
require 'image_mosaic/image/mosaic'
|
10
|
+
require 'image_mosaic/image/parent'
|
11
|
+
require 'image_mosaic/operations/compositor'
|
12
|
+
require 'image_mosaic/operations/construct'
|
13
|
+
require 'image_mosaic/railtie' if defined?(Rails)
|
10
14
|
|
11
15
|
module ImageMosaic
|
12
16
|
HEIGHT = 1000
|
13
17
|
WIDTH = 1000
|
18
|
+
COLOUR = '#ffffff'.freeze
|
14
19
|
|
15
|
-
|
16
|
-
|
17
|
-
@items = items
|
18
|
-
end
|
19
|
-
|
20
|
-
def save
|
21
|
-
parent.write("#{SecureRandom.uuid}.png")
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def parent
|
27
|
-
@parent ||= Image::Parent.new(valid_items, colour: 'white', columns: setting.columns, dimension: setting.dimension).create
|
28
|
-
end
|
29
|
-
|
30
|
-
def setting
|
31
|
-
@setting ||= Data::Setting.new(valid_items.count)
|
32
|
-
end
|
33
|
-
|
34
|
-
def valid_items
|
35
|
-
@valid_items ||= Data::Validator.new(@items).items
|
36
|
-
end
|
20
|
+
def self.create(items, colour: COLOUR)
|
21
|
+
Operations::Construct.new(items, colour: colour).parent
|
37
22
|
end
|
38
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: image_mosaic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Goodwin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -85,11 +85,15 @@ files:
|
|
85
85
|
- bin/setup
|
86
86
|
- image_mosaic.gemspec
|
87
87
|
- lib/image_mosaic.rb
|
88
|
+
- lib/image_mosaic/data/background.rb
|
88
89
|
- lib/image_mosaic/data/setting.rb
|
89
90
|
- lib/image_mosaic/data/validator.rb
|
90
91
|
- lib/image_mosaic/image/child.rb
|
92
|
+
- lib/image_mosaic/image/mosaic.rb
|
91
93
|
- lib/image_mosaic/image/parent.rb
|
92
94
|
- lib/image_mosaic/operations/compositor.rb
|
95
|
+
- lib/image_mosaic/operations/construct.rb
|
96
|
+
- lib/image_mosaic/railtie.rb
|
93
97
|
- lib/image_mosaic/version.rb
|
94
98
|
homepage: http://github.com/dannyguk
|
95
99
|
licenses:
|