sprite_map 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []