pix_scale 0.0.2 → 0.1.0
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 +4 -4
- data/.travis.yml +7 -0
- data/NEWS.md +10 -0
- data/README.md +36 -7
- data/Rakefile +8 -0
- data/lib/pix_scale/command.rb +3 -12
- data/lib/pix_scale/pic.rb +68 -0
- data/lib/pix_scale/version.rb +1 -1
- data/lib/pix_scale.rb +1 -0
- data/pix_scale.gemspec +3 -0
- data/test/fixtures/nijip.png +0 -0
- data/test/fixtures/nyanko.PNG +0 -0
- data/test/fixtures/teabreak.JPEG +0 -0
- data/test/fixtures/teabreak.JPG +0 -0
- data/test/fixtures/teabreak.jpeg +0 -0
- data/test/fixtures/teabreak.jpg +0 -0
- data/test/run-test.rb +11 -0
- data/test/test-pic.rb +127 -0
- metadata +63 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b969d5d5f7aa5de29c297dbd8e98c5d6a020d68
|
4
|
+
data.tar.gz: 9baf4d771fec21f8bab5d0a3e3b48c93fe2ca30e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f32fb05f7e477d24b491a57512c5461ac23d44a76f409b61cce943e740c87ce13c617d6a463a9b910826ad47e0347d817c694acbdb5c6fcae64f8d175d416cd
|
7
|
+
data.tar.gz: 7a0d320513997a7fec07e4e480ecff59ff9c4f3b29f33cbd167ababbe25ac86b2ffb5f5a627e39740b7a523e15a042eac2c9215cfa337e7efbc0bd1523184ec5
|
data/.travis.yml
ADDED
data/NEWS.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# NEWS
|
2
2
|
|
3
|
+
## 0.1.0: 2013-06-29
|
4
|
+
|
5
|
+
Supported absolute length release!
|
6
|
+
|
7
|
+
### Changes
|
8
|
+
|
9
|
+
* Improvements
|
10
|
+
* Supported absolute length for width and height
|
11
|
+
* Supported upper case for extension name
|
12
|
+
|
3
13
|
## 0.0.2: 2013-06-27
|
4
14
|
|
5
15
|
Fix a typo release!
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# pix\_scale
|
2
2
|
|
3
3
|
A command line tool for scale of pix.
|
4
4
|
|
@@ -11,19 +11,48 @@ A command line tool for scale of pix.
|
|
11
11
|
|
12
12
|
gem install pix_scale
|
13
13
|
|
14
|
+
## Official supported format
|
15
|
+
|
16
|
+
* PNG
|
17
|
+
* JPEG
|
18
|
+
|
14
19
|
## Usage
|
15
20
|
|
21
|
+
### rate
|
22
|
+
|
23
|
+
% ls -l
|
24
|
+
-rw-rw-r-- 1 you you 46643 2013-06-27 20:00 foo.png
|
25
|
+
|
26
|
+
% pix_scale foo.png 0.5
|
27
|
+
|
28
|
+
% ls -l
|
29
|
+
-rw-rw-r-- 1 you you 46643 2013-06-27 20:00 foo.png
|
30
|
+
-rw-rw-r-- 1 you you 18539 2013-06-27 20:01 foo-0.5.png
|
31
|
+
|
32
|
+
### width,height
|
33
|
+
|
34
|
+
% ls -l
|
35
|
+
-rw-rw-r-- 1 you you 46643 2013-06-27 20:00 foo.png
|
36
|
+
|
37
|
+
% pix_scale foo.png 200,200
|
38
|
+
|
39
|
+
% ls -l
|
40
|
+
-rw-rw-r-- 1 you you 46643 2013-06-27 20:00 foo.png
|
41
|
+
-rw-rw-r-- 1 you you 18539 2013-06-27 20:01 foo-200_200.png
|
42
|
+
|
43
|
+
### multiple files
|
44
|
+
|
16
45
|
% ls -l
|
17
|
-
-rw-rw-r-- 1 you you 46643
|
18
|
-
-rw-rw-r-- 1 you you 31438
|
46
|
+
-rw-rw-r-- 1 you you 46643 2013-06-27 20:00 foo.png
|
47
|
+
-rw-rw-r-- 1 you you 31438 2013-06-27 20:00 bar.png
|
19
48
|
|
20
49
|
% pix_scale *.png 0.5
|
21
50
|
|
22
51
|
% ls -l
|
23
|
-
-rw-rw-r-- 1 you you 46643
|
24
|
-
-rw-rw-r-- 1 you you 18539
|
25
|
-
-rw-rw-r-- 1 you you 31438
|
26
|
-
-rw-rw-r-- 1 you you 16462
|
52
|
+
-rw-rw-r-- 1 you you 46643 2013-06-27 20:00 foo.png
|
53
|
+
-rw-rw-r-- 1 you you 18539 2013-06-27 20:01 foo-0.5.png
|
54
|
+
-rw-rw-r-- 1 you you 31438 2013-06-27 20:00 bar.png
|
55
|
+
-rw-rw-r-- 1 you you 16462 2013-06-27 20:01 bar-0.5.png
|
27
56
|
|
28
57
|
## Contributing
|
29
58
|
|
data/Rakefile
CHANGED
data/lib/pix_scale/command.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "
|
1
|
+
require "pix_scale/pic"
|
2
2
|
require "pix_scale/version"
|
3
3
|
|
4
4
|
module PixScale
|
@@ -15,19 +15,10 @@ Example: pix_scale foo.png 0.5
|
|
15
15
|
exit(true)
|
16
16
|
end
|
17
17
|
|
18
|
-
scale = arguments.pop
|
18
|
+
scale = arguments.pop
|
19
19
|
|
20
20
|
arguments.each do |pic_path|
|
21
|
-
|
22
|
-
basename = File.basename(pic_path, ".*")
|
23
|
-
extname = File.extname(pic_path).sub(/^\./, "")
|
24
|
-
|
25
|
-
pic = Gdk::Pixbuf.new(pic_path)
|
26
|
-
scaled_pic = pic.scale(pic.width * scale, pic.height * scale)
|
27
|
-
|
28
|
-
output_path = "#{dirname}/#{basename}-#{scale.to_s}.#{extname}"
|
29
|
-
type = (/\Ajpg\z/ =~ extname) ? "jpeg" : extname
|
30
|
-
scaled_pic.save(output_path, type)
|
21
|
+
Pic.scale_and_save(pic_path, scale)
|
31
22
|
end
|
32
23
|
end
|
33
24
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "gdk_pixbuf2"
|
2
|
+
|
3
|
+
module PixScale
|
4
|
+
class Pic
|
5
|
+
def self.scale_and_save(path, scale)
|
6
|
+
new(path).scale_and_save(scale)
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :path, :type
|
10
|
+
def initialize(path)
|
11
|
+
@path = path
|
12
|
+
@pic = Gdk::Pixbuf.new(path)
|
13
|
+
@type = (/\A\.jpg\z/i =~ extname) ? "jpeg" : extname.sub(/^\./, "").downcase
|
14
|
+
end
|
15
|
+
|
16
|
+
def scale_and_save(scale)
|
17
|
+
scale_string = scale.to_s.sub(/[^\.0-9]/, "_")
|
18
|
+
output_path = "#{dirname}/#{basename}-#{scale_string}#{extname}"
|
19
|
+
scale(scale).save(output_path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def scale(scale)
|
23
|
+
new_pic = self.dup
|
24
|
+
new_pic.scale!(scale)
|
25
|
+
new_pic
|
26
|
+
end
|
27
|
+
|
28
|
+
def scale!(scale)
|
29
|
+
if scale.is_a?(Float)
|
30
|
+
width = @pic.width * scale
|
31
|
+
height = @pic.height * scale
|
32
|
+
elsif scale.is_a?(Integer)
|
33
|
+
width = scale
|
34
|
+
height = @pic.height * (scale.to_f / @pic.width)
|
35
|
+
elsif /\A[0-9]+\.[0-9]+\z/ =~ scale
|
36
|
+
width = @pic.width * scale.to_f
|
37
|
+
height = @pic.height * scale.to_f
|
38
|
+
elsif /\A[0-9]+[^\.0-9][0-9]+\z/ =~ scale
|
39
|
+
width, height = scale.split(/[^\.0-9]/).map(&:to_i)
|
40
|
+
elsif /\A[0-9]+\z/ =~ scale
|
41
|
+
width = scale.to_i
|
42
|
+
height = @pic.height * (scale.to_f / @pic.width)
|
43
|
+
elsif /\A[^\.0-9]([0-9]+)\z/ =~ scale
|
44
|
+
width = @pic.width * ($1.to_f / @pic.height)
|
45
|
+
height = $1.to_i
|
46
|
+
end
|
47
|
+
|
48
|
+
@pic = @pic.scale(width, height)
|
49
|
+
end
|
50
|
+
|
51
|
+
def save(output_path)
|
52
|
+
@pic.save(output_path, @type)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
def dirname
|
57
|
+
File.dirname(@path)
|
58
|
+
end
|
59
|
+
|
60
|
+
def basename
|
61
|
+
File.basename(@path, ".*")
|
62
|
+
end
|
63
|
+
|
64
|
+
def extname
|
65
|
+
File.extname(@path)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/pix_scale/version.rb
CHANGED
data/lib/pix_scale.rb
CHANGED
data/pix_scale.gemspec
CHANGED
@@ -20,6 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_runtime_dependency("gdk_pixbuf2")
|
22
22
|
|
23
|
+
spec.add_development_dependency("test-unit")
|
24
|
+
spec.add_development_dependency("test-unit-notify")
|
25
|
+
spec.add_development_dependency("test-unit-rr")
|
23
26
|
spec.add_development_dependency("bundler", "~> 1.3")
|
24
27
|
spec.add_development_dependency("rake")
|
25
28
|
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/run-test.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "test-unit"
|
4
|
+
require "test/unit/notify"
|
5
|
+
require "test/unit/rr"
|
6
|
+
|
7
|
+
base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
8
|
+
$LOAD_PATH.unshift(File.join(base_dir, "lib"))
|
9
|
+
$LOAD_PATH.unshift(File.join(base_dir, "test"))
|
10
|
+
|
11
|
+
exit Test::Unit::AutoRunner.run(true)
|
data/test/test-pic.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
require "pix_scale/pic"
|
2
|
+
|
3
|
+
class PicTest < Test::Unit::TestCase
|
4
|
+
def test_static_scale_and_save
|
5
|
+
path = "test/fixtures/nijip.png"
|
6
|
+
scaled_path = "test/fixtures/nijip-0.5.png"
|
7
|
+
File.delete(scaled_path) if File.exist?(scaled_path)
|
8
|
+
PixScale::Pic.scale_and_save(path, 0.5)
|
9
|
+
assert_true(File.file?(scaled_path))
|
10
|
+
assert_true(File.size(path) > File.size(scaled_path))
|
11
|
+
assert_true(File.size(scaled_path) > 0)
|
12
|
+
File.delete(scaled_path)
|
13
|
+
end
|
14
|
+
|
15
|
+
class ScaleAndSaveTest < self
|
16
|
+
def test_scale_and_save_rate
|
17
|
+
path = "test/fixtures/nijip.png"
|
18
|
+
scale = 0.5
|
19
|
+
scaled_path = "test/fixtures/nijip-0.5.png"
|
20
|
+
assert_scale_and_save(path, scale, scaled_path)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_scale_and_save_width_and_height
|
24
|
+
path = "test/fixtures/nijip.png"
|
25
|
+
scale = "240,180"
|
26
|
+
scaled_path = "test/fixtures/nijip-240_180.png"
|
27
|
+
assert_scale_and_save(path, scale, scaled_path)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_scale_and_save_upcase_PNG
|
31
|
+
path = "test/fixtures/nyanko.PNG"
|
32
|
+
scale = 0.66
|
33
|
+
scaled_path = "test/fixtures/nyanko-0.66.PNG"
|
34
|
+
assert_scale_and_save(path, scale, scaled_path)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_scale_and_save_jpg
|
38
|
+
path = "test/fixtures/teabreak.jpg"
|
39
|
+
scale = 0.09
|
40
|
+
scaled_path = "test/fixtures/teabreak-0.09.jpg"
|
41
|
+
assert_scale_and_save(path, scale, scaled_path)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_scale_and_save_jpeg
|
45
|
+
path = "test/fixtures/teabreak.jpeg"
|
46
|
+
scale = 0.09
|
47
|
+
scaled_path = "test/fixtures/teabreak-0.09.jpeg"
|
48
|
+
assert_scale_and_save(path, scale, scaled_path)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_scale_and_save_upcase_JPG
|
52
|
+
path = "test/fixtures/teabreak.JPG"
|
53
|
+
scale = 0.09
|
54
|
+
scaled_path = "test/fixtures/teabreak-0.09.JPG"
|
55
|
+
assert_scale_and_save(path, scale, scaled_path)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_scale_and_save_upcase_JPEG
|
59
|
+
path = "test/fixtures/teabreak.JPEG"
|
60
|
+
scale = 0.09
|
61
|
+
scaled_path = "test/fixtures/teabreak-0.09.JPEG"
|
62
|
+
assert_scale_and_save(path, scale, scaled_path)
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
def assert_scale_and_save(path, scale, scaled_path)
|
67
|
+
File.delete(scaled_path) if File.exist?(scaled_path)
|
68
|
+
pic = PixScale::Pic.new(path)
|
69
|
+
pic.scale_and_save(scale)
|
70
|
+
assert_true(File.file?(scaled_path))
|
71
|
+
assert_true(File.size(path) > File.size(scaled_path))
|
72
|
+
assert_true(File.size(scaled_path) > 0)
|
73
|
+
File.delete(scaled_path)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class ScaleTest < self
|
78
|
+
def setup
|
79
|
+
@path = "test/fixtures/nijip.png"
|
80
|
+
@pic = PixScale::Pic.new(@path)
|
81
|
+
@before_pic = @pic.instance_variable_get(:@pic).dup
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_float
|
85
|
+
scale = 0.5
|
86
|
+
scaled_pic = @pic.scale(scale).instance_variable_get(:@pic)
|
87
|
+
assert_equal(@before_pic.width * scale, scaled_pic.width)
|
88
|
+
assert_equal(@before_pic.height * scale, scaled_pic.height)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_string_like_float
|
92
|
+
scale = "0.5"
|
93
|
+
scaled_pic = @pic.scale(scale).instance_variable_get(:@pic)
|
94
|
+
assert_equal(@before_pic.width * scale.to_f, scaled_pic.width)
|
95
|
+
assert_equal(@before_pic.height * scale.to_f, scaled_pic.height)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_integer_as_width
|
99
|
+
width = 240
|
100
|
+
scaled_pic = @pic.scale(width).instance_variable_get(:@pic)
|
101
|
+
assert_equal(width, scaled_pic.width)
|
102
|
+
assert_equal(@before_pic.height * (width.to_f / @before_pic.width), scaled_pic.height)
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_string_as_width
|
106
|
+
width = "240"
|
107
|
+
scaled_pic = @pic.scale(width).instance_variable_get(:@pic)
|
108
|
+
assert_equal(width.to_i, scaled_pic.width)
|
109
|
+
assert_equal(@before_pic.height * (width.to_f / @before_pic.width), scaled_pic.height)
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_string_as_height
|
113
|
+
height = "180"
|
114
|
+
scaled_pic = @pic.scale(",#{height}").instance_variable_get(:@pic)
|
115
|
+
assert_equal(@before_pic.width * (height.to_f / @before_pic.height), scaled_pic.width)
|
116
|
+
assert_equal(height.to_i, scaled_pic.height)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_string_width_and_height
|
120
|
+
width = 240
|
121
|
+
height = 180
|
122
|
+
scaled_pic = @pic.scale("#{width},#{height}").instance_variable_get(:@pic)
|
123
|
+
assert_equal(width, scaled_pic.width)
|
124
|
+
assert_equal(height, scaled_pic.height)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pix_scale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masafumi Yokoyama
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gdk_pixbuf2
|
@@ -24,6 +24,48 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: test-unit
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit-notify
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: test-unit-rr
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: bundler
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -61,6 +103,7 @@ extensions: []
|
|
61
103
|
extra_rdoc_files: []
|
62
104
|
files:
|
63
105
|
- .gitignore
|
106
|
+
- .travis.yml
|
64
107
|
- Gemfile
|
65
108
|
- LICENSE.txt
|
66
109
|
- NEWS.md
|
@@ -69,8 +112,17 @@ files:
|
|
69
112
|
- bin/pix_scale
|
70
113
|
- lib/pix_scale.rb
|
71
114
|
- lib/pix_scale/command.rb
|
115
|
+
- lib/pix_scale/pic.rb
|
72
116
|
- lib/pix_scale/version.rb
|
73
117
|
- pix_scale.gemspec
|
118
|
+
- test/fixtures/nijip.png
|
119
|
+
- test/fixtures/nyanko.PNG
|
120
|
+
- test/fixtures/teabreak.JPEG
|
121
|
+
- test/fixtures/teabreak.JPG
|
122
|
+
- test/fixtures/teabreak.jpeg
|
123
|
+
- test/fixtures/teabreak.jpg
|
124
|
+
- test/run-test.rb
|
125
|
+
- test/test-pic.rb
|
74
126
|
homepage: https://github.com/myokoym/pix_scale
|
75
127
|
licenses:
|
76
128
|
- MIT
|
@@ -95,5 +147,13 @@ rubygems_version: 2.0.3
|
|
95
147
|
signing_key:
|
96
148
|
specification_version: 4
|
97
149
|
summary: A command line tool for scale of pix.
|
98
|
-
test_files:
|
150
|
+
test_files:
|
151
|
+
- test/fixtures/nijip.png
|
152
|
+
- test/fixtures/nyanko.PNG
|
153
|
+
- test/fixtures/teabreak.JPEG
|
154
|
+
- test/fixtures/teabreak.JPG
|
155
|
+
- test/fixtures/teabreak.jpeg
|
156
|
+
- test/fixtures/teabreak.jpg
|
157
|
+
- test/run-test.rb
|
158
|
+
- test/test-pic.rb
|
99
159
|
has_rdoc:
|