sprite_map 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/app/models/sprite_map/image_map.rb +84 -0
- data/db/migrate/20170308072125_create_sprite_map_image_maps.rb +11 -0
- data/lib/sprite_map.rb +8 -0
- data/lib/sprite_map/engine.rb +5 -0
- data/lib/sprite_map/version.rb +3 -0
- metadata +84 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3e7135e0b241c64e82b498366a7fca119a2ef034
|
4
|
+
data.tar.gz: c47089165a2d64662c4ee6f22c9c4a2686124a3b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7f087e4bd11cd30d05e41b4a39253746a0aed2e97e921cfb525ef1d5dd09df1b108bc304de3373dfbd893be82971e3d0e90e3d6c0d7cc67ef9742910f07e6929
|
7
|
+
data.tar.gz: 662fb6e30c2a64f7697c3ad52909627cb175731e05506748600b5a25f835b61245004500d2da7b0f0229853632b7deb4d0ddc1b90558cbe791c7b3b08fb714a6
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module SpriteMap
|
2
|
+
class ImageMap < ActiveRecord::Base
|
3
|
+
validates :positions, :image, :fingerprint, presence: true
|
4
|
+
|
5
|
+
serialize :positions
|
6
|
+
|
7
|
+
has_attached_file :image
|
8
|
+
|
9
|
+
validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
|
10
|
+
|
11
|
+
def self.find_or_create_by_image_map(image_map)
|
12
|
+
fingerprint = Digest::MD5.hexdigest(image_map.keys.sort.join('-'))
|
13
|
+
|
14
|
+
if (sprite_map = ImageMap.find_by(fingerprint: fingerprint))
|
15
|
+
sprite_map.touch
|
16
|
+
sprite_map
|
17
|
+
else
|
18
|
+
total_width = 0
|
19
|
+
total_height = 0
|
20
|
+
|
21
|
+
images = {}
|
22
|
+
|
23
|
+
positions = image_map.inject({}) do |memo, (identifier, path)|
|
24
|
+
image_file = Magick::Image.read(path)[0]
|
25
|
+
|
26
|
+
image_width = image_file.columns
|
27
|
+
image_height = image_file.rows
|
28
|
+
|
29
|
+
memo[identifier] = {
|
30
|
+
x: total_width,
|
31
|
+
y: 0,
|
32
|
+
width: image_width,
|
33
|
+
height: image_height
|
34
|
+
}
|
35
|
+
|
36
|
+
images[identifier] = {
|
37
|
+
path: path,
|
38
|
+
file: image_file
|
39
|
+
}
|
40
|
+
|
41
|
+
total_width += image_width
|
42
|
+
total_height = [total_height, image_height].max
|
43
|
+
memo
|
44
|
+
end
|
45
|
+
|
46
|
+
create_sprite_image(
|
47
|
+
fingerprint: fingerprint,
|
48
|
+
positions: positions,
|
49
|
+
images: images,
|
50
|
+
width: total_width,
|
51
|
+
height: total_height
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def url
|
57
|
+
image.url(:original)
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def self.create_sprite_image(fingerprint:, images:, positions:, width:, height:)
|
63
|
+
sprite_map_image = Magick::Image.new(width, height)
|
64
|
+
sprite_map_image.opacity = Magick::QuantumRange
|
65
|
+
|
66
|
+
positions.each do |identifier, image_options|
|
67
|
+
sprite_map_image.composite!(
|
68
|
+
images[identifier][:file], image_options[:x], 0, Magick::SrcOverCompositeOp
|
69
|
+
)
|
70
|
+
end
|
71
|
+
|
72
|
+
file = Tempfile.new([fingerprint, '.jpg'])
|
73
|
+
sprite_map_image.write(file.path)
|
74
|
+
|
75
|
+
ImageMap.create!(
|
76
|
+
positions: positions,
|
77
|
+
image: file,
|
78
|
+
fingerprint: fingerprint
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateSpriteMapImageMaps < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :sprite_map_image_maps do |t|
|
4
|
+
t.string :fingerprint, null: false, default: '', index: true
|
5
|
+
t.text :positions
|
6
|
+
t.timestamps null: false
|
7
|
+
end
|
8
|
+
|
9
|
+
add_attachment :sprite_map_image_maps, :image
|
10
|
+
end
|
11
|
+
end
|
data/lib/sprite_map.rb
ADDED
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sprite_map
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aleck Greenham
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-03-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: paperclip
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '6.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.2'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '6.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: sqlite3
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
description: Generate sprites from images at runtime, to cache and speed up subsequent
|
48
|
+
requests
|
49
|
+
email:
|
50
|
+
- greenhama13@gmail.com
|
51
|
+
executables: []
|
52
|
+
extensions: []
|
53
|
+
extra_rdoc_files: []
|
54
|
+
files:
|
55
|
+
- app/models/sprite_map/image_map.rb
|
56
|
+
- db/migrate/20170308072125_create_sprite_map_image_maps.rb
|
57
|
+
- lib/sprite_map.rb
|
58
|
+
- lib/sprite_map/engine.rb
|
59
|
+
- lib/sprite_map/version.rb
|
60
|
+
homepage: https://github.com/greena13/sprite_map
|
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.2.2
|
81
|
+
signing_key:
|
82
|
+
specification_version: 4
|
83
|
+
summary: Rails engine for generating dynamic sprite maps
|
84
|
+
test_files: []
|