sprite_map 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,8 @@
1
+ require "sprite_map/engine"
2
+
3
+ module SpriteMap
4
+
5
+ def self.create
6
+
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module SpriteMap
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace SpriteMap
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module SpriteMap
2
+ VERSION = "0.0.1"
3
+ end
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: []