spritopia 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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +11 -0
- data/bin/spritopia +6 -0
- data/lib/spritopia.rb +89 -0
- data/lib/spritopia/version.rb +3 -0
- data/spritopia.gemspec +27 -0
- data/test/sample/cats.sprite +3 -0
- data/test/sample/images/100x100.png +0 -0
- data/test/sample/images/20x20.png +0 -0
- data/test/sample/images/350x150.png +0 -0
- data/test/test_spritopia.rb +27 -0
- metadata +129 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
data/bin/spritopia
ADDED
data/lib/spritopia.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
require "spritopia/version"
|
2
|
+
require 'chunky_png'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Spritopia
|
6
|
+
extend self
|
7
|
+
include ChunkyPNG
|
8
|
+
|
9
|
+
module CLI
|
10
|
+
extend self
|
11
|
+
|
12
|
+
def start
|
13
|
+
if ARGV.size != 1
|
14
|
+
show_usage
|
15
|
+
exit -1
|
16
|
+
else
|
17
|
+
Spritopia.process_file(ARGV.first)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def show_usage
|
25
|
+
puts "usage: #{$0} filename.sprite\n\n" <<
|
26
|
+
"\tfilename.sprite should be a file with a list of files, relatives to itself.\n" <<
|
27
|
+
"\tThe files should be .png"
|
28
|
+
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
def process_file(file)
|
36
|
+
raise "File should be a .sprite file" unless file =~ /\.sprite$/
|
37
|
+
basename = File.basename(file, ".sprite")
|
38
|
+
dir = File.dirname(file)
|
39
|
+
basefilename = File.join(dir, basename)
|
40
|
+
|
41
|
+
File.file?(file) or raise "The file #{file} did not exists"
|
42
|
+
|
43
|
+
# Get the list of the images
|
44
|
+
|
45
|
+
files = File.read(file).split("\n").map{|f| f.strip}
|
46
|
+
|
47
|
+
# Calculate height and width
|
48
|
+
sizes = files.map do |f|
|
49
|
+
image = Image.from_file(File.join(dir,f))
|
50
|
+
[image.width, image.height]
|
51
|
+
end
|
52
|
+
|
53
|
+
height = sizes.inject( 0 ) { |memo,i| memo+i[1] }
|
54
|
+
width = sizes.inject( 0 ) { |memo,i| memo > i[0] ? memo : i[0] }
|
55
|
+
|
56
|
+
|
57
|
+
# Generate the sprite
|
58
|
+
canvas = Image.new(width,height)
|
59
|
+
|
60
|
+
file_info = {}
|
61
|
+
|
62
|
+
files.inject(0) { |current_height, filename|
|
63
|
+
new_image = Image.from_file(File.join(dir,filename))
|
64
|
+
canvas.replace!(new_image, 0, current_height)
|
65
|
+
|
66
|
+
file_info[filename] = {:width => new_image.width, :height => new_image.height, :x => 0, :y => current_height, :x2 => new_image.width, :y2 => new_image.height + current_height }
|
67
|
+
|
68
|
+
|
69
|
+
current_height + new_image.height
|
70
|
+
}
|
71
|
+
|
72
|
+
# Save the sprite
|
73
|
+
|
74
|
+
puts File.basename(file,".sprite")
|
75
|
+
|
76
|
+
canvas.save(basefilename+".png")
|
77
|
+
|
78
|
+
# Save the json
|
79
|
+
|
80
|
+
File.open(basefilename + ".json", "w") do |f|
|
81
|
+
f.write file_info.to_json
|
82
|
+
end
|
83
|
+
|
84
|
+
true
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
end
|
data/spritopia.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "spritopia/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "spritopia"
|
7
|
+
s.version = Spritopia::VERSION
|
8
|
+
s.authors = ["Guillermo Álvarez"]
|
9
|
+
s.email = ["guillermo@cientifico.net"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{A sprite generator that don't output in css}
|
12
|
+
s.description = %q{Maybe some day it can, but not for the moment}
|
13
|
+
|
14
|
+
s.rubyforge_project = "spritopia"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_development_dependency "minitest"
|
22
|
+
s.add_development_dependency "rake"
|
23
|
+
s.add_runtime_dependency "chunky_png"
|
24
|
+
s.add_runtime_dependency "oily_png"
|
25
|
+
s.add_runtime_dependency "json"
|
26
|
+
s.add_runtime_dependency "thor"
|
27
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spritopia'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
class SpritopiaTest < MiniTest::Unit::TestCase
|
5
|
+
|
6
|
+
def test_true
|
7
|
+
assert true
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_it_works
|
11
|
+
sprite_file = full_path('cats.sprite')
|
12
|
+
|
13
|
+
assert_equal true, Spritopia.process_file(sprite_file), "Spritopia should return true"
|
14
|
+
|
15
|
+
assert_file_exists "cats.png", "cats.png should be generated"
|
16
|
+
assert_file_exists "cats.json", "cats.json should be generated"
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def assert_file_exists(filename, message = nil)
|
21
|
+
assert File.file?(full_path(filename)), message
|
22
|
+
end
|
23
|
+
|
24
|
+
def full_path(filename)
|
25
|
+
File.expand_path("../sample/#{filename}",__FILE__)
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spritopia
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Guillermo Álvarez
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-29 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: minitest
|
16
|
+
requirement: &2157225040 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2157225040
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &2157224620 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2157224620
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: chunky_png
|
38
|
+
requirement: &2157224200 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2157224200
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: oily_png
|
49
|
+
requirement: &2157223780 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2157223780
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: json
|
60
|
+
requirement: &2157223360 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2157223360
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: thor
|
71
|
+
requirement: &2157222900 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2157222900
|
80
|
+
description: Maybe some day it can, but not for the moment
|
81
|
+
email:
|
82
|
+
- guillermo@cientifico.net
|
83
|
+
executables:
|
84
|
+
- spritopia
|
85
|
+
extensions: []
|
86
|
+
extra_rdoc_files: []
|
87
|
+
files:
|
88
|
+
- .gitignore
|
89
|
+
- Gemfile
|
90
|
+
- Rakefile
|
91
|
+
- bin/spritopia
|
92
|
+
- lib/spritopia.rb
|
93
|
+
- lib/spritopia/version.rb
|
94
|
+
- spritopia.gemspec
|
95
|
+
- test/sample/cats.sprite
|
96
|
+
- test/sample/images/100x100.png
|
97
|
+
- test/sample/images/20x20.png
|
98
|
+
- test/sample/images/350x150.png
|
99
|
+
- test/test_spritopia.rb
|
100
|
+
homepage: ''
|
101
|
+
licenses: []
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
requirements: []
|
119
|
+
rubyforge_project: spritopia
|
120
|
+
rubygems_version: 1.8.6
|
121
|
+
signing_key:
|
122
|
+
specification_version: 3
|
123
|
+
summary: A sprite generator that don't output in css
|
124
|
+
test_files:
|
125
|
+
- test/sample/cats.sprite
|
126
|
+
- test/sample/images/100x100.png
|
127
|
+
- test/sample/images/20x20.png
|
128
|
+
- test/sample/images/350x150.png
|
129
|
+
- test/test_spritopia.rb
|