ruby-vips 0.3.14 → 1.0.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 +22 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +46 -31
- data/{LICENSE → LICENSE.txt} +1 -1
- data/README.md +101 -145
- data/Rakefile +45 -0
- data/TODO +8 -32
- data/VERSION +1 -0
- data/example/annotate.rb +17 -0
- data/example/daltonize8.rb +75 -0
- data/example/example1.rb +84 -0
- data/example/example2.rb +31 -0
- data/example/example3.rb +19 -0
- data/example/example4.rb +18 -0
- data/example/example5.rb +31 -0
- data/example/trim8.rb +41 -0
- data/example/watermark.rb +44 -0
- data/example/wobble.rb +36 -0
- data/lib/vips.rb +151 -14
- data/lib/vips/access.rb +14 -0
- data/lib/vips/align.rb +11 -0
- data/lib/vips/angle.rb +12 -0
- data/lib/vips/angle45.rb +16 -0
- data/lib/vips/argument.rb +163 -0
- data/lib/vips/bandformat.rb +20 -0
- data/lib/vips/call.rb +302 -0
- data/lib/vips/coding.rb +14 -0
- data/lib/vips/demandstyle.rb +35 -0
- data/lib/vips/direction.rb +11 -0
- data/lib/vips/error.rb +30 -0
- data/lib/vips/extend.rb +22 -0
- data/lib/vips/foreignflags.rb +20 -0
- data/lib/vips/image.rb +1382 -0
- data/lib/vips/interpolate.rb +37 -0
- data/lib/vips/interpretation.rb +28 -0
- data/lib/vips/methods.rb +1807 -0
- data/lib/vips/operation.rb +19 -0
- data/ruby-vips8.gemspec +112 -0
- data/spec/image_spec.rb +515 -0
- data/spec/samples/balloon.v +0 -0
- data/spec/samples/ghost.ppm +405 -0
- data/spec/samples/huge.jpg +0 -0
- data/spec/samples/icc.jpg +0 -0
- data/spec/samples/lcd.icc +0 -0
- data/spec/samples/lion.svg +154 -0
- data/spec/samples/sample.csv +7 -0
- data/spec/samples/sample.exr +0 -0
- data/spec/samples/wagon.jpg +0 -0
- data/spec/samples/wagon.v +0 -0
- data/spec/spec_helper.rb +49 -0
- data/spec/vips_spec.rb +74 -0
- metadata +110 -70
- data/ext/extconf.rb +0 -31
- data/ext/header.c +0 -457
- data/ext/header.h +0 -9
- data/ext/image.c +0 -629
- data/ext/image.h +0 -72
- data/ext/image_arithmetic.c +0 -936
- data/ext/image_arithmetic.h +0 -38
- data/ext/image_boolean.c +0 -301
- data/ext/image_boolean.h +0 -8
- data/ext/image_colour.c +0 -590
- data/ext/image_colour.h +0 -36
- data/ext/image_conversion.c +0 -884
- data/ext/image_conversion.h +0 -38
- data/ext/image_convolution.c +0 -368
- data/ext/image_convolution.h +0 -13
- data/ext/image_freq_filt.c +0 -740
- data/ext/image_freq_filt.h +0 -27
- data/ext/image_histograms_lut.c +0 -643
- data/ext/image_histograms_lut.h +0 -28
- data/ext/image_morphology.c +0 -327
- data/ext/image_morphology.h +0 -13
- data/ext/image_mosaicing.c +0 -554
- data/ext/image_mosaicing.h +0 -15
- data/ext/image_relational.c +0 -384
- data/ext/image_relational.h +0 -8
- data/ext/image_resample.c +0 -249
- data/ext/image_resample.h +0 -9
- data/ext/interpolator.c +0 -106
- data/ext/interpolator.h +0 -7
- data/ext/mask.c +0 -347
- data/ext/mask.h +0 -18
- data/ext/reader.c +0 -261
- data/ext/reader.h +0 -2
- data/ext/ruby_vips.c +0 -188
- data/ext/ruby_vips.h +0 -72
- data/ext/tags +0 -450
- data/ext/writer.c +0 -371
- data/ext/writer.h +0 -2
- data/lib/vips/reader.rb +0 -272
- data/lib/vips/version.rb +0 -3
- data/lib/vips/writer.rb +0 -342
- data/ruby-vips.gemspec +0 -100
- data/ruby.supp +0 -134
Binary file
|
Binary file
|
Binary file
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'vips'
|
2
|
+
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
module Spec
|
6
|
+
|
7
|
+
module Path
|
8
|
+
def root
|
9
|
+
@root ||= Pathname.new(File.expand_path('..', __FILE__))
|
10
|
+
end
|
11
|
+
|
12
|
+
def sample(*path)
|
13
|
+
root.join 'samples', *path
|
14
|
+
end
|
15
|
+
|
16
|
+
def tmp(*path)
|
17
|
+
root.join 'tmp', 'working', *path
|
18
|
+
end
|
19
|
+
|
20
|
+
extend self
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
module Helpers
|
25
|
+
def reset_working!
|
26
|
+
FileUtils.rm Dir[tmp.join('*.*')]
|
27
|
+
FileUtils.mkdir_p(tmp)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def simg(name)
|
34
|
+
Spec::Path::sample(name).to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
def timg(name)
|
38
|
+
Spec::Path::tmp(name).to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
RSpec.configure do |config|
|
42
|
+
config.include Spec::Path
|
43
|
+
config.include Spec::Helpers
|
44
|
+
|
45
|
+
config.before :each do
|
46
|
+
reset_working!
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/spec/vips_spec.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper.rb'
|
2
|
+
|
3
|
+
RSpec.describe Vips do
|
4
|
+
describe '#call' do
|
5
|
+
it 'can make a black image' do
|
6
|
+
image = Vips::call "black", 200, 200
|
7
|
+
|
8
|
+
expect(image.width).to eq(200)
|
9
|
+
expect(image.height).to eq(200)
|
10
|
+
expect(image.bands).to eq(1)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'can take an optional argument' do
|
14
|
+
image = Vips::call "black", 200, 200, :bands => 12
|
15
|
+
|
16
|
+
expect(image.width).to eq(200)
|
17
|
+
expect(image.height).to eq(200)
|
18
|
+
expect(image.bands).to eq(12)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'can take an optional argument' do
|
22
|
+
image = Vips::call "black", 200, 200, :bands => 12
|
23
|
+
|
24
|
+
expect(image.width).to eq(200)
|
25
|
+
expect(image.height).to eq(200)
|
26
|
+
expect(image.bands).to eq(12)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'can handle enum arguments' do
|
30
|
+
black = Vips::call "black", 200, 200
|
31
|
+
embed = Vips::call "embed", black, 10, 10, 500, 500,
|
32
|
+
:extend => :mirror
|
33
|
+
|
34
|
+
expect(embed.width).to eq(500)
|
35
|
+
expect(embed.height).to eq(500)
|
36
|
+
expect(embed.bands).to eq(1)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'enum arguments can be strings' do
|
40
|
+
black = Vips::call "black", 200, 200
|
41
|
+
embed = Vips::call "embed", black, 10, 10, 500, 500,
|
42
|
+
:extend => "mirror"
|
43
|
+
|
44
|
+
expect(embed.width).to eq(500)
|
45
|
+
expect(embed.height).to eq(500)
|
46
|
+
expect(embed.bands).to eq(1)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'can return optional output args' do
|
50
|
+
point = Vips::call "black", 1, 1
|
51
|
+
test = Vips::call "embed", point, 20, 10, 100, 100,
|
52
|
+
:extend => :white
|
53
|
+
value, opts = Vips::call "min", test, :x => true, :y => true
|
54
|
+
|
55
|
+
expect(value).to eq(0)
|
56
|
+
expect(opts['x']).to eq(20)
|
57
|
+
expect(opts['y']).to eq(10)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'can call draw operations' do
|
61
|
+
black = Vips::call "black", 100, 100
|
62
|
+
test = Vips::call "draw_rect", black, 255, 10, 10, 1, 1
|
63
|
+
|
64
|
+
max_black = Vips::call "max", black
|
65
|
+
max_test = Vips::call "max", test
|
66
|
+
|
67
|
+
expect(max_black).to eq(0)
|
68
|
+
expect(max_test).to eq(255)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
metadata
CHANGED
@@ -1,140 +1,181 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-vips
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Timothy Elliott
|
8
7
|
- John Cupitt
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2016-
|
11
|
+
date: 2016-06-07 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: gobject-introspection
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - "~>"
|
19
18
|
- !ruby/object:Gem::Version
|
20
|
-
version: '3.
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.3'
|
21
34
|
type: :development
|
22
35
|
prerelease: false
|
23
36
|
version_requirements: !ruby/object:Gem::Requirement
|
24
37
|
requirements:
|
25
38
|
- - "~>"
|
26
39
|
- !ruby/object:Gem::Version
|
27
|
-
version: '3.
|
40
|
+
version: '3.3'
|
28
41
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
42
|
+
name: yard
|
30
43
|
requirement: !ruby/object:Gem::Requirement
|
31
44
|
requirements:
|
32
45
|
- - "~>"
|
33
46
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
47
|
+
version: '0.8'
|
35
48
|
type: :development
|
36
49
|
prerelease: false
|
37
50
|
version_requirements: !ruby/object:Gem::Requirement
|
38
51
|
requirements:
|
39
52
|
- - "~>"
|
40
53
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
54
|
+
version: '0.8'
|
42
55
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
56
|
+
name: redcarpet
|
44
57
|
requirement: !ruby/object:Gem::Requirement
|
45
58
|
requirements:
|
46
59
|
- - "~>"
|
47
60
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
61
|
+
version: '3.3'
|
49
62
|
type: :development
|
50
63
|
prerelease: false
|
51
64
|
version_requirements: !ruby/object:Gem::Requirement
|
52
65
|
requirements:
|
53
66
|
- - "~>"
|
54
67
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
68
|
+
version: '3.3'
|
56
69
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
70
|
+
name: github-markup
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.4'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.4'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: jeweler
|
58
99
|
requirement: !ruby/object:Gem::Requirement
|
59
100
|
requirements:
|
60
101
|
- - "~>"
|
61
102
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
103
|
+
version: '2.0'
|
63
104
|
type: :development
|
64
105
|
prerelease: false
|
65
106
|
version_requirements: !ruby/object:Gem::Requirement
|
66
107
|
requirements:
|
67
108
|
- - "~>"
|
68
109
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
70
|
-
description:
|
110
|
+
version: '2.0'
|
111
|
+
description: ruby-vips is a ruby extension for vips. It is extremely fast and it can
|
112
|
+
process huge images without requiring the entire image to be loaded into memory.
|
71
113
|
email: jcupitt@gmail.com
|
72
114
|
executables: []
|
73
|
-
extensions:
|
74
|
-
- ext/extconf.rb
|
115
|
+
extensions: []
|
75
116
|
extra_rdoc_files:
|
76
|
-
- LICENSE
|
117
|
+
- LICENSE.txt
|
77
118
|
- README.md
|
78
119
|
- TODO
|
79
120
|
files:
|
121
|
+
- ".travis.yml"
|
80
122
|
- CHANGELOG.md
|
123
|
+
- Gemfile
|
81
124
|
- Gemfile.lock
|
82
|
-
- LICENSE
|
125
|
+
- LICENSE.txt
|
83
126
|
- README.md
|
127
|
+
- Rakefile
|
84
128
|
- TODO
|
85
|
-
-
|
86
|
-
-
|
87
|
-
-
|
88
|
-
-
|
89
|
-
-
|
90
|
-
-
|
91
|
-
-
|
92
|
-
-
|
93
|
-
-
|
94
|
-
-
|
95
|
-
-
|
96
|
-
- ext/image_conversion.c
|
97
|
-
- ext/image_conversion.h
|
98
|
-
- ext/image_convolution.c
|
99
|
-
- ext/image_convolution.h
|
100
|
-
- ext/image_freq_filt.c
|
101
|
-
- ext/image_freq_filt.h
|
102
|
-
- ext/image_histograms_lut.c
|
103
|
-
- ext/image_histograms_lut.h
|
104
|
-
- ext/image_morphology.c
|
105
|
-
- ext/image_morphology.h
|
106
|
-
- ext/image_mosaicing.c
|
107
|
-
- ext/image_mosaicing.h
|
108
|
-
- ext/image_relational.c
|
109
|
-
- ext/image_relational.h
|
110
|
-
- ext/image_resample.c
|
111
|
-
- ext/image_resample.h
|
112
|
-
- ext/interpolator.c
|
113
|
-
- ext/interpolator.h
|
114
|
-
- ext/mask.c
|
115
|
-
- ext/mask.h
|
116
|
-
- ext/reader.c
|
117
|
-
- ext/reader.h
|
118
|
-
- ext/ruby_vips.c
|
119
|
-
- ext/ruby_vips.h
|
120
|
-
- ext/tags
|
121
|
-
- ext/writer.c
|
122
|
-
- ext/writer.h
|
129
|
+
- VERSION
|
130
|
+
- example/annotate.rb
|
131
|
+
- example/daltonize8.rb
|
132
|
+
- example/example1.rb
|
133
|
+
- example/example2.rb
|
134
|
+
- example/example3.rb
|
135
|
+
- example/example4.rb
|
136
|
+
- example/example5.rb
|
137
|
+
- example/trim8.rb
|
138
|
+
- example/watermark.rb
|
139
|
+
- example/wobble.rb
|
123
140
|
- lib/vips.rb
|
124
|
-
- lib/vips/
|
125
|
-
- lib/vips/
|
126
|
-
- lib/vips/
|
127
|
-
-
|
128
|
-
-
|
141
|
+
- lib/vips/access.rb
|
142
|
+
- lib/vips/align.rb
|
143
|
+
- lib/vips/angle.rb
|
144
|
+
- lib/vips/angle45.rb
|
145
|
+
- lib/vips/argument.rb
|
146
|
+
- lib/vips/bandformat.rb
|
147
|
+
- lib/vips/call.rb
|
148
|
+
- lib/vips/coding.rb
|
149
|
+
- lib/vips/demandstyle.rb
|
150
|
+
- lib/vips/direction.rb
|
151
|
+
- lib/vips/error.rb
|
152
|
+
- lib/vips/extend.rb
|
153
|
+
- lib/vips/foreignflags.rb
|
154
|
+
- lib/vips/image.rb
|
155
|
+
- lib/vips/interpolate.rb
|
156
|
+
- lib/vips/interpretation.rb
|
157
|
+
- lib/vips/methods.rb
|
158
|
+
- lib/vips/operation.rb
|
159
|
+
- ruby-vips8.gemspec
|
160
|
+
- spec/image_spec.rb
|
161
|
+
- spec/samples/balloon.v
|
162
|
+
- spec/samples/ghost.ppm
|
163
|
+
- spec/samples/huge.jpg
|
164
|
+
- spec/samples/icc.jpg
|
165
|
+
- spec/samples/lcd.icc
|
166
|
+
- spec/samples/lion.svg
|
167
|
+
- spec/samples/sample.csv
|
168
|
+
- spec/samples/sample.exr
|
169
|
+
- spec/samples/wagon.jpg
|
170
|
+
- spec/samples/wagon.v
|
171
|
+
- spec/spec_helper.rb
|
172
|
+
- spec/vips_spec.rb
|
129
173
|
homepage: http://github.com/jcupitt/ruby-vips
|
130
174
|
licenses:
|
131
175
|
- MIT
|
132
176
|
metadata: {}
|
133
177
|
post_install_message:
|
134
|
-
rdoc_options:
|
135
|
-
- "--title"
|
136
|
-
- 'ruby-vips #{version}'
|
137
|
-
- ext
|
178
|
+
rdoc_options: []
|
138
179
|
require_paths:
|
139
180
|
- lib
|
140
181
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -149,9 +190,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
190
|
version: '0'
|
150
191
|
requirements: []
|
151
192
|
rubyforge_project:
|
152
|
-
rubygems_version: 2.
|
193
|
+
rubygems_version: 2.5.1
|
153
194
|
signing_key:
|
154
195
|
specification_version: 4
|
155
|
-
summary:
|
156
|
-
huge images without requiring the entire image to be loaded into memory.
|
196
|
+
summary: Ruby extension for the vips image processing library.
|
157
197
|
test_files: []
|
data/ext/extconf.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
ENV['RC_ARCHS'] = '' if RUBY_PLATFORM =~ /darwin/
|
2
|
-
|
3
|
-
require "mkmf"
|
4
|
-
|
5
|
-
File::unlink("Makefile") if (File::exist?("Makefile"))
|
6
|
-
|
7
|
-
# override normal build configuration to build debug friendly library
|
8
|
-
# if installed via 'gem install ruby-vips -- --enable-debug'
|
9
|
-
# see: http://jonforums.github.com/ruby/2011/01/27/debugging-native-gems-1.html
|
10
|
-
if enable_config('debug')
|
11
|
-
puts '[INFO] enabling debug library build configuration.'
|
12
|
-
if RUBY_VERSION < '1.9'
|
13
|
-
$CFLAGS = CONFIG['CFLAGS'].gsub(/\s\-O\d?\s/, ' -O0 ')
|
14
|
-
$CFLAGS.gsub!(/\s?\-g\w*\s/, ' -ggdb3 ')
|
15
|
-
CONFIG['LDSHARED'] = CONFIG['LDSHARED'].gsub(/\s\-s(\s|\z)/, ' ')
|
16
|
-
else
|
17
|
-
CONFIG['debugflags'] << ' -ggdb3 -O0'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
# vips-7.30 and later use plain "vips" for the pkg-config name: look for that
|
22
|
-
# first
|
23
|
-
if not pkg_config("vips")
|
24
|
-
VIPS_VERSIONS = %w[7.29 7.28 7.27 7.26 7.24 7.23 7.22 7.20]
|
25
|
-
|
26
|
-
if not VIPS_VERSIONS.detect {|x| pkg_config("vips-#{x}") }
|
27
|
-
raise("no pkg_config for any of following libvips versions: #{VIPS_VERSIONS.join(', ')}")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
create_makefile('vips_ext')
|
data/ext/header.c
DELETED
@@ -1,457 +0,0 @@
|
|
1
|
-
#include "ruby_vips.h"
|
2
|
-
|
3
|
-
VALUE mVIPSHeader;
|
4
|
-
|
5
|
-
static ID id_notset, id_uchar, id_char, id_ushort, id_short, id_uint, id_int,
|
6
|
-
id_float, id_complex, id_double, id_dbcomplex;
|
7
|
-
|
8
|
-
ID
|
9
|
-
header_band_fmt_to_id(VipsBandFmt band_fmt)
|
10
|
-
{
|
11
|
-
switch(band_fmt) {
|
12
|
-
case IM_BANDFMT_NOTSET: return id_notset;
|
13
|
-
case IM_BANDFMT_UCHAR: return id_uchar;
|
14
|
-
case IM_BANDFMT_CHAR: return id_char;
|
15
|
-
case IM_BANDFMT_USHORT: return id_ushort;
|
16
|
-
case IM_BANDFMT_SHORT: return id_short;
|
17
|
-
case IM_BANDFMT_UINT: return id_uint;
|
18
|
-
case IM_BANDFMT_INT: return id_int;
|
19
|
-
case IM_BANDFMT_FLOAT: return id_float;
|
20
|
-
case IM_BANDFMT_COMPLEX: return id_complex; // two floats
|
21
|
-
case IM_BANDFMT_DOUBLE: return id_double;
|
22
|
-
case IM_BANDFMT_DPCOMPLEX: return id_dbcomplex; // two doubles
|
23
|
-
default: return id_notset;
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
VipsBandFmt
|
28
|
-
header_id_to_band_fmt(ID rb)
|
29
|
-
{
|
30
|
-
if(rb == id_notset) return IM_BANDFMT_NOTSET;
|
31
|
-
else if(rb == id_uchar) return IM_BANDFMT_UCHAR;
|
32
|
-
else if(rb == id_char) return IM_BANDFMT_CHAR;
|
33
|
-
else if(rb == id_ushort) return IM_BANDFMT_USHORT;
|
34
|
-
else if(rb == id_short) return IM_BANDFMT_SHORT;
|
35
|
-
else if(rb == id_uint) return IM_BANDFMT_UINT;
|
36
|
-
else if(rb == id_int) return IM_BANDFMT_INT;
|
37
|
-
else if(rb == id_float) return IM_BANDFMT_FLOAT;
|
38
|
-
else if(rb == id_complex) return IM_BANDFMT_COMPLEX;
|
39
|
-
else if(rb == id_double) return IM_BANDFMT_DOUBLE;
|
40
|
-
else if(rb == id_dbcomplex) return IM_BANDFMT_DPCOMPLEX;
|
41
|
-
|
42
|
-
return (VipsBandFmt)NULL;
|
43
|
-
}
|
44
|
-
|
45
|
-
/*
|
46
|
-
* call-seq:
|
47
|
-
* im.x_size -> number
|
48
|
-
*
|
49
|
-
* Get the width in pixels of the image.
|
50
|
-
*/
|
51
|
-
|
52
|
-
static VALUE
|
53
|
-
header_x_size(VALUE obj)
|
54
|
-
{
|
55
|
-
GetImg(obj, data, im);
|
56
|
-
|
57
|
-
if (im)
|
58
|
-
return INT2FIX(im->Xsize);
|
59
|
-
|
60
|
-
return Qnil;
|
61
|
-
}
|
62
|
-
|
63
|
-
/*
|
64
|
-
* call-seq:
|
65
|
-
* im.y_size -> number
|
66
|
-
*
|
67
|
-
* Get the height in pixels of the image.
|
68
|
-
*/
|
69
|
-
|
70
|
-
static VALUE
|
71
|
-
header_y_size(VALUE obj)
|
72
|
-
{
|
73
|
-
GetImg(obj, data, im);
|
74
|
-
|
75
|
-
if (im)
|
76
|
-
return INT2FIX(im->Ysize);
|
77
|
-
|
78
|
-
return Qnil;
|
79
|
-
}
|
80
|
-
|
81
|
-
/*
|
82
|
-
* call-seq:
|
83
|
-
* im.size -> [width, height]
|
84
|
-
*
|
85
|
-
* Get the size of the image in pixels.
|
86
|
-
*/
|
87
|
-
|
88
|
-
static VALUE
|
89
|
-
header_size(VALUE obj)
|
90
|
-
{
|
91
|
-
GetImg(obj, data, im);
|
92
|
-
|
93
|
-
if (im)
|
94
|
-
return rb_ary_new3(2, INT2FIX(im->Xsize), INT2FIX(im->Ysize));
|
95
|
-
|
96
|
-
return Qnil;
|
97
|
-
}
|
98
|
-
|
99
|
-
/*
|
100
|
-
* call-seq:
|
101
|
-
* im.bands -> number
|
102
|
-
*
|
103
|
-
* Get the number of bands in the image.
|
104
|
-
*/
|
105
|
-
|
106
|
-
static VALUE
|
107
|
-
header_bands(VALUE obj)
|
108
|
-
{
|
109
|
-
GetImg(obj, data, im);
|
110
|
-
|
111
|
-
if (im)
|
112
|
-
return INT2FIX(im->Bands);
|
113
|
-
|
114
|
-
return Qnil;
|
115
|
-
}
|
116
|
-
|
117
|
-
/*
|
118
|
-
* call-seq:
|
119
|
-
* im.band_fmt -> band_format_sym
|
120
|
-
*
|
121
|
-
* Get the band format of the image.
|
122
|
-
*/
|
123
|
-
|
124
|
-
static VALUE
|
125
|
-
header_band_fmt(VALUE obj)
|
126
|
-
{
|
127
|
-
GetImg(obj, data, im);
|
128
|
-
|
129
|
-
if (im)
|
130
|
-
return ID2SYM(header_band_fmt_to_id(im->BandFmt));
|
131
|
-
|
132
|
-
return Qnil;
|
133
|
-
}
|
134
|
-
|
135
|
-
/*
|
136
|
-
* call-seq:
|
137
|
-
* im.x_res -> number
|
138
|
-
*
|
139
|
-
* Get the x-resolution of the image.
|
140
|
-
*/
|
141
|
-
|
142
|
-
static VALUE
|
143
|
-
header_x_res(VALUE obj)
|
144
|
-
{
|
145
|
-
GetImg(obj, data, im);
|
146
|
-
|
147
|
-
if (im)
|
148
|
-
return rb_float_new(im->Xres);
|
149
|
-
|
150
|
-
return Qnil;
|
151
|
-
}
|
152
|
-
|
153
|
-
/*
|
154
|
-
* call-seq:
|
155
|
-
* im.y_res -> number
|
156
|
-
*
|
157
|
-
* Get the y-resolution of the image.
|
158
|
-
*/
|
159
|
-
|
160
|
-
static VALUE
|
161
|
-
header_y_res(VALUE obj)
|
162
|
-
{
|
163
|
-
GetImg(obj, data, im);
|
164
|
-
|
165
|
-
if (im)
|
166
|
-
return rb_float_new(im->Yres);
|
167
|
-
|
168
|
-
return Qnil;
|
169
|
-
}
|
170
|
-
|
171
|
-
/*
|
172
|
-
* call-seq:
|
173
|
-
* im.x_offset -> number
|
174
|
-
*
|
175
|
-
* Get the x-offset of the image.
|
176
|
-
*/
|
177
|
-
|
178
|
-
static VALUE
|
179
|
-
header_x_offset(VALUE obj)
|
180
|
-
{
|
181
|
-
GetImg(obj, data, im);
|
182
|
-
|
183
|
-
if (im)
|
184
|
-
return INT2FIX(im->Xoffset);
|
185
|
-
|
186
|
-
return Qnil;
|
187
|
-
}
|
188
|
-
|
189
|
-
/*
|
190
|
-
* call-seq:
|
191
|
-
* im.y_offset -> number
|
192
|
-
*
|
193
|
-
* Get the y-offset of the image.
|
194
|
-
*/
|
195
|
-
|
196
|
-
static VALUE
|
197
|
-
header_y_offset(VALUE obj)
|
198
|
-
{
|
199
|
-
GetImg(obj, data, im);
|
200
|
-
|
201
|
-
if (im)
|
202
|
-
return INT2FIX(im->Yoffset);
|
203
|
-
|
204
|
-
return Qnil;
|
205
|
-
}
|
206
|
-
|
207
|
-
/* VipsImage macros with useful information */
|
208
|
-
|
209
|
-
/*
|
210
|
-
* call-seq:
|
211
|
-
* im.sizeof_element -> number
|
212
|
-
*
|
213
|
-
* Returns the size of a single image band item, in bytes.
|
214
|
-
*/
|
215
|
-
|
216
|
-
static VALUE
|
217
|
-
header_sizeof_element(VALUE obj)
|
218
|
-
{
|
219
|
-
GetImg(obj, data, im);
|
220
|
-
|
221
|
-
if (im)
|
222
|
-
return INT2FIX(IM_IMAGE_SIZEOF_ELEMENT(im));
|
223
|
-
|
224
|
-
return Qnil;
|
225
|
-
}
|
226
|
-
|
227
|
-
/*
|
228
|
-
* call-seq:
|
229
|
-
* im.sizeof_pel -> number
|
230
|
-
*
|
231
|
-
* Returns the size of a pixel in the image, in bytes.
|
232
|
-
*/
|
233
|
-
|
234
|
-
static VALUE
|
235
|
-
header_sizeof_pel(VALUE obj)
|
236
|
-
{
|
237
|
-
GetImg(obj, data, im);
|
238
|
-
|
239
|
-
if (im)
|
240
|
-
return INT2FIX(IM_IMAGE_SIZEOF_PEL(im));
|
241
|
-
|
242
|
-
return Qnil;
|
243
|
-
}
|
244
|
-
|
245
|
-
/*
|
246
|
-
* call-seq:
|
247
|
-
* im.sizeof_line -> number
|
248
|
-
*
|
249
|
-
* Returns the size of all pixels in the row of the image, uncompressed, in
|
250
|
-
* bytes.
|
251
|
-
*/
|
252
|
-
|
253
|
-
static VALUE
|
254
|
-
header_sizeof_line(VALUE obj)
|
255
|
-
{
|
256
|
-
GetImg(obj, data, im);
|
257
|
-
|
258
|
-
if (im)
|
259
|
-
return INT2FIX(IM_IMAGE_SIZEOF_LINE(im));
|
260
|
-
|
261
|
-
return Qnil;
|
262
|
-
}
|
263
|
-
|
264
|
-
/*
|
265
|
-
* call-seq:
|
266
|
-
* im.n_elements -> number
|
267
|
-
*
|
268
|
-
* Returns the number of elements in an image row, i.e. bands * x_size.
|
269
|
-
*/
|
270
|
-
|
271
|
-
static VALUE
|
272
|
-
header_n_elements(VALUE obj)
|
273
|
-
{
|
274
|
-
GetImg(obj, data, im);
|
275
|
-
|
276
|
-
if (im)
|
277
|
-
return INT2FIX(IM_IMAGE_N_ELEMENTS(im));
|
278
|
-
|
279
|
-
return Qnil;
|
280
|
-
}
|
281
|
-
|
282
|
-
static VALUE
|
283
|
-
header_meta_get(VALUE obj, const char* name)
|
284
|
-
{
|
285
|
-
GetImg(obj, data, im);
|
286
|
-
|
287
|
-
void *buf;
|
288
|
-
size_t len;
|
289
|
-
|
290
|
-
if (im_meta_get_blob(im, name, &buf, &len))
|
291
|
-
return Qnil;
|
292
|
-
|
293
|
-
return rb_tainted_str_new((char *)buf, len);
|
294
|
-
}
|
295
|
-
|
296
|
-
static VALUE
|
297
|
-
header_meta_get_string(VALUE obj, const char* name)
|
298
|
-
{
|
299
|
-
GetImg(obj, data, im);
|
300
|
-
|
301
|
-
char *str;
|
302
|
-
VALUE result;
|
303
|
-
|
304
|
-
if (vips_image_get_as_string(im, name, &str))
|
305
|
-
vips_lib_error();
|
306
|
-
result = rb_tainted_str_new(str, strlen(str));
|
307
|
-
g_free(str);
|
308
|
-
|
309
|
-
return result;
|
310
|
-
}
|
311
|
-
|
312
|
-
static void
|
313
|
-
header_meta_set_string(VALUE obj, const char* name, const char* value)
|
314
|
-
{
|
315
|
-
GetImg(obj, data, im);
|
316
|
-
|
317
|
-
vips_image_set_string(im, name, value);
|
318
|
-
}
|
319
|
-
|
320
|
-
static VALUE
|
321
|
-
header_meta_p(VALUE obj, const char* name)
|
322
|
-
{
|
323
|
-
GetImg(obj, data, im);
|
324
|
-
|
325
|
-
if (im_header_get_typeof(im, name))
|
326
|
-
return Qtrue;
|
327
|
-
|
328
|
-
return Qfalse;
|
329
|
-
}
|
330
|
-
|
331
|
-
/*
|
332
|
-
* call-seq:
|
333
|
-
* im.exif -> string
|
334
|
-
*
|
335
|
-
* Returns a binary string containing the raw exif header data.
|
336
|
-
*/
|
337
|
-
|
338
|
-
static VALUE
|
339
|
-
header_exif(VALUE obj)
|
340
|
-
{
|
341
|
-
return header_meta_get(obj, IM_META_EXIF_NAME);
|
342
|
-
}
|
343
|
-
|
344
|
-
/*
|
345
|
-
* call-seq:
|
346
|
-
* im.exif? -> true or false
|
347
|
-
*
|
348
|
-
* Indicates whether the image has an exif header attached to it.
|
349
|
-
*/
|
350
|
-
|
351
|
-
static VALUE
|
352
|
-
header_exif_p(VALUE obj)
|
353
|
-
{
|
354
|
-
return header_meta_p(obj, IM_META_EXIF_NAME);
|
355
|
-
}
|
356
|
-
|
357
|
-
/*
|
358
|
-
* call-seq:
|
359
|
-
* im.icc -> string
|
360
|
-
*
|
361
|
-
* Returns a binary string containing the raw icc header data.
|
362
|
-
*/
|
363
|
-
|
364
|
-
static VALUE
|
365
|
-
header_icc(VALUE obj)
|
366
|
-
{
|
367
|
-
return header_meta_get(obj, IM_META_ICC_NAME);
|
368
|
-
}
|
369
|
-
|
370
|
-
/*
|
371
|
-
* call-seq:
|
372
|
-
* im.icc? -> true or false
|
373
|
-
*
|
374
|
-
* Indicates whether the image has an icc header attached to it.
|
375
|
-
*/
|
376
|
-
|
377
|
-
static VALUE
|
378
|
-
header_icc_p(VALUE obj)
|
379
|
-
{
|
380
|
-
return header_meta_p(obj, IM_META_ICC_NAME);
|
381
|
-
}
|
382
|
-
|
383
|
-
/*
|
384
|
-
* call-seq:
|
385
|
-
* im.get(name) -> string
|
386
|
-
*
|
387
|
-
* Return metadata item 'name' as a string.
|
388
|
-
*/
|
389
|
-
|
390
|
-
static VALUE
|
391
|
-
header_get(VALUE obj, VALUE name)
|
392
|
-
{
|
393
|
-
return header_meta_get_string(obj, StringValuePtr(name));
|
394
|
-
}
|
395
|
-
|
396
|
-
/*
|
397
|
-
* call-seq:
|
398
|
-
* im.set(name, value)
|
399
|
-
*
|
400
|
-
* Set metadata item 'name' to value.
|
401
|
-
*/
|
402
|
-
|
403
|
-
static VALUE
|
404
|
-
header_set(VALUE obj, VALUE name, VALUE value)
|
405
|
-
{
|
406
|
-
header_meta_set_string(obj,
|
407
|
-
StringValuePtr(name), StringValuePtr(value));
|
408
|
-
|
409
|
-
return Qnil;
|
410
|
-
}
|
411
|
-
|
412
|
-
/*
|
413
|
-
* The header module holds image header operations that are common to readers,
|
414
|
-
* writers and image objects.
|
415
|
-
*/
|
416
|
-
|
417
|
-
void
|
418
|
-
init_Header( void )
|
419
|
-
{
|
420
|
-
mVIPSHeader = rb_define_module_under(mVIPS, "Header");
|
421
|
-
|
422
|
-
rb_define_method(mVIPSHeader, "x_size", header_x_size, 0);
|
423
|
-
rb_define_method(mVIPSHeader, "y_size", header_y_size, 0);
|
424
|
-
rb_define_method(mVIPSHeader, "size", header_size, 0);
|
425
|
-
rb_define_method(mVIPSHeader, "bands", header_bands, 0);
|
426
|
-
rb_define_method(mVIPSHeader, "band_fmt", header_band_fmt, 0);
|
427
|
-
rb_define_method(mVIPSHeader, "x_res", header_x_res, 0);
|
428
|
-
rb_define_method(mVIPSHeader, "y_res", header_y_res, 0);
|
429
|
-
rb_define_method(mVIPSHeader, "x_offset", header_x_offset, 0);
|
430
|
-
rb_define_method(mVIPSHeader, "y_offset", header_y_offset, 0);
|
431
|
-
rb_define_method(mVIPSHeader, "sizeof_element", header_sizeof_element, 0);
|
432
|
-
rb_define_method(mVIPSHeader, "sizeof_pel", header_sizeof_pel, 0);
|
433
|
-
rb_define_method(mVIPSHeader, "sizeof_line", header_sizeof_line, 0);
|
434
|
-
rb_define_method(mVIPSHeader, "n_elements", header_n_elements, 0);
|
435
|
-
rb_define_method(mVIPSHeader, "exif", header_exif, 0);
|
436
|
-
rb_define_method(mVIPSHeader, "exif?", header_exif_p, 0);
|
437
|
-
rb_define_method(mVIPSHeader, "icc", header_icc, 0);
|
438
|
-
rb_define_method(mVIPSHeader, "icc?", header_icc_p, 0);
|
439
|
-
rb_define_method(mVIPSHeader, "get", header_get, 1);
|
440
|
-
rb_define_method(mVIPSHeader, "set", header_set, 2);
|
441
|
-
|
442
|
-
id_notset = rb_intern("NOTSET");
|
443
|
-
id_uchar = rb_intern("UCHAR");
|
444
|
-
id_char = rb_intern("CHAR");
|
445
|
-
id_ushort = rb_intern("USHORT");
|
446
|
-
id_short = rb_intern("SHORT");
|
447
|
-
id_uint = rb_intern("UINT");
|
448
|
-
id_int = rb_intern("INT");
|
449
|
-
id_float = rb_intern("FLOAT");
|
450
|
-
id_complex = rb_intern("COMPLEX");
|
451
|
-
id_double = rb_intern("DOUBLE");
|
452
|
-
id_dbcomplex = rb_intern("DBCOMPLEX");
|
453
|
-
|
454
|
-
#if 0
|
455
|
-
VALUE mVIPS = rb_define_module("VIPS");
|
456
|
-
#endif
|
457
|
-
}
|