spritopia 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in spritopia.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'minitest/unit'
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.pattern = "test/test_*.rb"
8
+ end
9
+
10
+ task :default => :test
11
+
data/bin/spritopia ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ require 'spritopia'
5
+
6
+ Spritopia::CLI.start
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
@@ -0,0 +1,3 @@
1
+ module Spritopia
2
+ VERSION = "0.0.1"
3
+ 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
@@ -0,0 +1,3 @@
1
+ images/100x100.png
2
+ images/20x20.png
3
+ images/350x150.png
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