jpeg 0.4.0 → 0.5.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/ext/jpeg/jpeg.c +7 -3
- data/ext/jpeg/jpeg.h +2 -4
- data/ext/jpeg/jpeg_error.c +3 -3
- data/ext/jpeg/jpeg_error.h +2 -2
- data/ext/jpeg/jpeg_image.c +116 -0
- data/ext/jpeg/{jpeg_jpeg.h → jpeg_image.h} +4 -4
- data/jpeg.gemspec +1 -0
- data/lib/jpeg.rb +6 -8
- data/lib/jpeg/image.rb +11 -0
- data/lib/jpeg/version.rb +2 -2
- data/spec/jpeg_spec.rb +11 -17
- data/spec/spec_helper.rb +2 -11
- metadata +32 -17
- data/ext/jpeg/jpeg_jpeg.c +0 -114
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17514bf49f64437e58f047e73f51f8aa910d419f
|
4
|
+
data.tar.gz: bad9d9450380e4d9f31c0ba2dbc3e1a6a434bbf9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e64f1099daaea7eee6c8b2e4ea3158550015a0117e5d804881a249c73ca207024b5ef094d9b72d46fec9fceff04b2dc982f02fb3444113907dc81ac2f86e944f
|
7
|
+
data.tar.gz: 241da4820a95b3feaa7820526c8ea62d5fa71c27efc302ac7aa669f07884f23196f8f61cc102d83b4f03529d648f4c5a7f1e08c210412c991deb5b6c7b4df902
|
data/ext/jpeg/jpeg.c
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
#include "jpeg.h"
|
2
|
-
#include "
|
2
|
+
#include "jpeg_image.h"
|
3
3
|
#include "jpeg_error.h"
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
VALUE rb_mJpeg;
|
6
|
+
|
7
|
+
void
|
8
|
+
Init_jpeg(void) {
|
9
|
+
rb_mJpeg = rb_define_module("Jpeg");
|
10
|
+
Init_jpeg_image();
|
7
11
|
Init_jpeg_error();
|
8
12
|
}
|
data/ext/jpeg/jpeg.h
CHANGED
data/ext/jpeg/jpeg_error.c
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
#include "jpeg_error.h"
|
3
3
|
#include "ruby.h"
|
4
4
|
|
5
|
-
extern VALUE
|
6
|
-
VALUE
|
5
|
+
extern VALUE rb_mJpeg;
|
6
|
+
VALUE rb_eJpegError;
|
7
7
|
|
8
8
|
void Init_jpeg_error() {
|
9
|
-
|
9
|
+
rb_eJpegError = rb_define_class_under(rb_mJpeg, "Error", rb_eStandardError);
|
10
10
|
}
|
data/ext/jpeg/jpeg_error.h
CHANGED
@@ -0,0 +1,116 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#include <jpeglib.h>
|
3
|
+
#include "jpeg_image.h"
|
4
|
+
#include "jpeg_error.h"
|
5
|
+
|
6
|
+
extern VALUE rb_mJpeg;
|
7
|
+
VALUE rb_cJpegImage;
|
8
|
+
|
9
|
+
static VALUE jpeg_image_s_open(int argc, VALUE *argv, VALUE sef);
|
10
|
+
static VALUE jpeg_image_alloc(VALUE klass);
|
11
|
+
static void jpeg_image_mark(struct rb_jpeg_image *p);
|
12
|
+
static void jpeg_image_free(struct rb_jpeg_image *p);
|
13
|
+
static VALUE jpeg_image_width(VALUE self);
|
14
|
+
static VALUE jpeg_image_height(VALUE self);
|
15
|
+
static VALUE jpeg_image_size(VALUE self);
|
16
|
+
static VALUE jpeg_image_color_info(VALUE self);
|
17
|
+
|
18
|
+
extern VALUE rb_eJpegError;
|
19
|
+
|
20
|
+
void Init_jpeg_image(void) {
|
21
|
+
rb_cJpegImage = rb_define_class_under(rb_mJpeg, "Image", rb_cObject);
|
22
|
+
rb_define_alloc_func(rb_cJpegImage, jpeg_image_alloc);
|
23
|
+
rb_define_singleton_method(rb_cJpegImage, "open", jpeg_image_s_open, -1);
|
24
|
+
rb_define_method(rb_cJpegImage, "width", jpeg_image_width, 0);
|
25
|
+
rb_define_method(rb_cJpegImage, "height", jpeg_image_height, 0);
|
26
|
+
rb_define_method(rb_cJpegImage, "size", jpeg_image_size, 0);
|
27
|
+
rb_define_method(rb_cJpegImage, "color_info", jpeg_image_color_info, 0);
|
28
|
+
}
|
29
|
+
|
30
|
+
void jpeg_image_exit(j_common_ptr jpeg) {
|
31
|
+
char buffer[JMSG_LENGTH_MAX];
|
32
|
+
jpeg->err->format_message(jpeg, buffer);
|
33
|
+
rb_raise(rb_eJpegError, buffer);
|
34
|
+
}
|
35
|
+
|
36
|
+
static VALUE jpeg_image_alloc(VALUE klass) {
|
37
|
+
struct rb_jpeg_image *jpeg = ALLOC(struct rb_jpeg_image);
|
38
|
+
|
39
|
+
jpeg->read = (void *)ALLOC(struct jpeg_decompress_struct);
|
40
|
+
jpeg->error = (void *)ALLOC(struct jpeg_error_mgr);
|
41
|
+
jpeg->read->err = jpeg_std_error(jpeg->error);
|
42
|
+
jpeg->error->error_exit = jpeg_image_exit;
|
43
|
+
jpeg_create_decompress(jpeg->read);
|
44
|
+
|
45
|
+
return Data_Wrap_Struct(klass, jpeg_image_mark, jpeg_image_free, jpeg);
|
46
|
+
}
|
47
|
+
|
48
|
+
static void jpeg_image_mark(struct rb_jpeg_image *p) {
|
49
|
+
|
50
|
+
}
|
51
|
+
|
52
|
+
static void jpeg_image_free(struct rb_jpeg_image *p) {
|
53
|
+
if (p->read) {
|
54
|
+
jpeg_destroy_decompress(p->read);
|
55
|
+
xfree(p->read);
|
56
|
+
}
|
57
|
+
if (p->error) {
|
58
|
+
xfree(p->error);
|
59
|
+
}
|
60
|
+
xfree(p);
|
61
|
+
}
|
62
|
+
|
63
|
+
static VALUE jpeg_image_s_open(int argc, VALUE *argv, VALUE self) {
|
64
|
+
VALUE path;
|
65
|
+
VALUE jpeg;
|
66
|
+
struct rb_jpeg_image *p_jpeg;
|
67
|
+
FILE *fp;
|
68
|
+
char *filename;
|
69
|
+
rb_scan_args(argc, argv, "1", &path);
|
70
|
+
Check_Type(path, T_STRING);
|
71
|
+
|
72
|
+
jpeg = rb_funcall(rb_cJpegImage, rb_intern("new"), 0);
|
73
|
+
Data_Get_Struct(jpeg, struct rb_jpeg_image, p_jpeg);
|
74
|
+
filename = StringValuePtr(path);
|
75
|
+
|
76
|
+
if ((fp = fopen(filename, "rb")) == NULL) {
|
77
|
+
rb_raise(rb_eJpegError, "Open file failed: %s", filename);
|
78
|
+
}
|
79
|
+
jpeg_stdio_src(p_jpeg->read, fp);
|
80
|
+
|
81
|
+
jpeg_read_header(p_jpeg->read, TRUE);
|
82
|
+
jpeg_start_decompress(p_jpeg->read);
|
83
|
+
fclose(fp);
|
84
|
+
return jpeg;
|
85
|
+
}
|
86
|
+
|
87
|
+
static VALUE jpeg_image_width(VALUE self) {
|
88
|
+
struct rb_jpeg_image *p_jpeg;
|
89
|
+
Data_Get_Struct(self, struct rb_jpeg_image, p_jpeg);
|
90
|
+
return rb_int_new(p_jpeg->read->output_width);
|
91
|
+
}
|
92
|
+
|
93
|
+
static VALUE jpeg_image_height(VALUE self) {
|
94
|
+
struct rb_jpeg_image *p_jpeg;
|
95
|
+
Data_Get_Struct(self, struct rb_jpeg_image, p_jpeg);
|
96
|
+
return rb_int_new(p_jpeg->read->output_height);
|
97
|
+
}
|
98
|
+
|
99
|
+
static VALUE jpeg_image_size(VALUE self) {
|
100
|
+
struct rb_jpeg_image *p_jpeg;
|
101
|
+
VALUE array;
|
102
|
+
Data_Get_Struct(self, struct rb_jpeg_image, p_jpeg);
|
103
|
+
|
104
|
+
array = rb_ary_new();
|
105
|
+
rb_ary_push(array, rb_int_new(p_jpeg->read->output_width));
|
106
|
+
rb_ary_push(array, rb_int_new(p_jpeg->read->output_height));
|
107
|
+
|
108
|
+
return array;
|
109
|
+
}
|
110
|
+
|
111
|
+
static VALUE jpeg_image_color_info(VALUE self) {
|
112
|
+
struct rb_jpeg_image *p_jpeg;
|
113
|
+
|
114
|
+
Data_Get_Struct(self, struct rb_jpeg_image, p_jpeg);
|
115
|
+
return ID2SYM(rb_intern( p_jpeg->read->out_color_components == 3 ? "rgb" : "gray" ));
|
116
|
+
}
|
@@ -1,14 +1,14 @@
|
|
1
|
-
#ifndef
|
2
|
-
#define
|
1
|
+
#ifndef RB_JPEG_JPEG_H
|
2
|
+
#define RB_JPEG_JPEG_H 1
|
3
3
|
#include <jpeglib.h>
|
4
4
|
#include "jpeg.h"
|
5
5
|
#include "ruby.h"
|
6
6
|
|
7
|
-
struct
|
7
|
+
struct rb_jpeg_image {
|
8
8
|
struct jpeg_decompress_struct *read;
|
9
9
|
struct jpeg_error_mgr *error;
|
10
10
|
};
|
11
11
|
|
12
|
-
void
|
12
|
+
void Init_jpeg_image();
|
13
13
|
|
14
14
|
#endif
|
data/jpeg.gemspec
CHANGED
@@ -22,5 +22,6 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.6"
|
23
23
|
spec.add_development_dependency "rake"
|
24
24
|
spec.add_development_dependency "rspec"
|
25
|
+
spec.add_development_dependency "pry"
|
25
26
|
spec.add_development_dependency "rake-compiler"
|
26
27
|
end
|
data/lib/jpeg.rb
CHANGED
@@ -1,22 +1,20 @@
|
|
1
1
|
require 'tempfile'
|
2
|
+
require 'jpeg/version'
|
2
3
|
require 'jpeg/jpeg'
|
4
|
+
require 'jpeg/image'
|
3
5
|
|
4
|
-
|
6
|
+
module Jpeg
|
5
7
|
def self.open_buffer(str)
|
6
8
|
tmp = Tempfile::new("ruby-jpeg")
|
7
9
|
tmp.set_encoding Encoding::BINARY if tmp.respond_to?(:set_encoding)
|
8
10
|
tmp.puts str
|
9
11
|
tmp.rewind
|
10
|
-
jpeg = Jpeg.open(tmp.path)
|
12
|
+
jpeg = Jpeg::Image.open(tmp.path)
|
11
13
|
tmp.close
|
12
14
|
jpeg
|
13
15
|
end
|
14
16
|
|
15
|
-
def
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def gray?
|
20
|
-
color_info == :gray
|
17
|
+
def self.open(file)
|
18
|
+
Jpeg::Image.open(file)
|
21
19
|
end
|
22
20
|
end
|
data/lib/jpeg/image.rb
ADDED
data/lib/jpeg/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.
|
1
|
+
module Jpeg
|
2
|
+
VERSION = "0.5.0"
|
3
3
|
end
|
data/spec/jpeg_spec.rb
CHANGED
@@ -9,31 +9,25 @@ describe "Jpeg" do
|
|
9
9
|
describe :open do
|
10
10
|
context "valid jpeg" do
|
11
11
|
before { @jpeg = Jpeg.open(sample_file_path("sample.jpg")) }
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
it { expect(subject).to be_a Jpeg::Image }
|
13
|
+
it { expect(subject.size).to eq [112, 112] }
|
14
|
+
it { expect(subject.width).to eq 112 }
|
15
|
+
it { expect(subject.height).to eq 112 }
|
16
|
+
it { expect(subject.color_info).to eq :rgb }
|
17
|
+
it { expect(subject).to be_rgb }
|
18
|
+
it { expect(subject).not_to be_gray }
|
18
19
|
end
|
20
|
+
|
19
21
|
context "non-exists file" do
|
20
|
-
it {
|
21
|
-
lambda {
|
22
|
-
Jpeg.open(sample_file_path("nonexists.jpg"))
|
23
|
-
}.should raise_error
|
24
|
-
}
|
22
|
+
it { expect { Jpeg.open(sample_file_path("nonexists.jpg")) }.to raise_error(Jpeg::Error) }
|
25
23
|
end
|
26
24
|
|
27
25
|
context "not a correct jpeg file" do
|
28
|
-
it {
|
29
|
-
lambda {
|
30
|
-
Jpeg.open(sample_file_path("sample.png"))
|
31
|
-
}.should raise_error
|
32
|
-
}
|
26
|
+
it { expect { Jpeg.open(sample_file_path("sample.png")) }.to raise_error(Jpeg::Error) }
|
33
27
|
end
|
34
28
|
end
|
35
29
|
describe :from_string do
|
36
30
|
before { @jpeg = Jpeg.open_buffer(File.open(sample_file_path("sample.jpg")).read) }
|
37
|
-
|
31
|
+
it { expect(subject.size).to eq [112, 112] }
|
38
32
|
end
|
39
33
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,3 @@
|
|
1
|
-
$LOAD_PATH.unshift
|
2
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
-
require 'rspec'
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
4
2
|
require 'jpeg'
|
5
|
-
|
6
|
-
# Requires supporting files with custom matchers and macros, etc,
|
7
|
-
# in ./support/ and its subdirectories.
|
8
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
-
|
10
|
-
RSpec.configure do |config|
|
11
|
-
|
12
|
-
end
|
3
|
+
require 'pry'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jpeg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- masarakki
|
@@ -14,56 +14,70 @@ dependencies:
|
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.6'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
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
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake-compiler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
description: libjpeg wrapper for ruby
|
@@ -74,10 +88,10 @@ extensions:
|
|
74
88
|
- ext/jpeg/extconf.rb
|
75
89
|
extra_rdoc_files: []
|
76
90
|
files:
|
77
|
-
- .document
|
78
|
-
- .gitignore
|
79
|
-
- .rspec
|
80
|
-
- .travis.yml
|
91
|
+
- ".document"
|
92
|
+
- ".gitignore"
|
93
|
+
- ".rspec"
|
94
|
+
- ".travis.yml"
|
81
95
|
- Gemfile
|
82
96
|
- LICENSE.txt
|
83
97
|
- README.md
|
@@ -88,10 +102,11 @@ files:
|
|
88
102
|
- ext/jpeg/jpeg.h
|
89
103
|
- ext/jpeg/jpeg_error.c
|
90
104
|
- ext/jpeg/jpeg_error.h
|
91
|
-
- ext/jpeg/
|
92
|
-
- ext/jpeg/
|
105
|
+
- ext/jpeg/jpeg_image.c
|
106
|
+
- ext/jpeg/jpeg_image.h
|
93
107
|
- jpeg.gemspec
|
94
108
|
- lib/jpeg.rb
|
109
|
+
- lib/jpeg/image.rb
|
95
110
|
- lib/jpeg/version.rb
|
96
111
|
- spec/jpeg_spec.rb
|
97
112
|
- spec/samples/sample.jpg
|
@@ -107,12 +122,12 @@ require_paths:
|
|
107
122
|
- lib
|
108
123
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
124
|
requirements:
|
110
|
-
- -
|
125
|
+
- - ">="
|
111
126
|
- !ruby/object:Gem::Version
|
112
127
|
version: '0'
|
113
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
129
|
requirements:
|
115
|
-
- -
|
130
|
+
- - ">="
|
116
131
|
- !ruby/object:Gem::Version
|
117
132
|
version: '0'
|
118
133
|
requirements: []
|
data/ext/jpeg/jpeg_jpeg.c
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
#include <stdio.h>
|
2
|
-
#include <jpeglib.h>
|
3
|
-
#include "jpeg_jpeg.h"
|
4
|
-
#include "jpeg_error.h"
|
5
|
-
|
6
|
-
VALUE Jpeg;
|
7
|
-
|
8
|
-
static VALUE jpeg_jpeg_s_open(int argc, VALUE *argv, VALUE sef);
|
9
|
-
static VALUE jpeg_jpeg_alloc(VALUE klass);
|
10
|
-
static void jpeg_jpeg_mark(struct jpeg_jpeg *p);
|
11
|
-
static void jpeg_jpeg_free(struct jpeg_jpeg *p);
|
12
|
-
static VALUE jpeg_jpeg_width(VALUE self);
|
13
|
-
static VALUE jpeg_jpeg_height(VALUE self);
|
14
|
-
static VALUE jpeg_jpeg_size(VALUE self);
|
15
|
-
static VALUE jpeg_jpeg_color_info(VALUE self);
|
16
|
-
|
17
|
-
extern VALUE Jpeg_Error;
|
18
|
-
|
19
|
-
void Init_jpeg_jpeg() {
|
20
|
-
Jpeg = rb_define_class("Jpeg", rb_cObject);
|
21
|
-
rb_define_alloc_func(Jpeg, jpeg_jpeg_alloc);
|
22
|
-
rb_define_singleton_method(Jpeg, "open", jpeg_jpeg_s_open, -1);
|
23
|
-
rb_define_method(Jpeg, "width", jpeg_jpeg_width, 0);
|
24
|
-
rb_define_method(Jpeg, "height", jpeg_jpeg_height, 0);
|
25
|
-
rb_define_method(Jpeg, "size", jpeg_jpeg_size, 0);
|
26
|
-
rb_define_method(Jpeg, "color_info", jpeg_jpeg_color_info, 0);
|
27
|
-
}
|
28
|
-
|
29
|
-
void jpeg_jpeg_exit(j_common_ptr jpeg) {
|
30
|
-
char buffer[JMSG_LENGTH_MAX];
|
31
|
-
jpeg->err->format_message(jpeg, buffer);
|
32
|
-
rb_raise(Jpeg_Error, buffer);
|
33
|
-
}
|
34
|
-
|
35
|
-
static VALUE jpeg_jpeg_alloc(VALUE klass) {
|
36
|
-
struct jpeg_jpeg *jpeg = ALLOC(struct jpeg_jpeg);
|
37
|
-
|
38
|
-
jpeg->read = (void *)ALLOC(struct jpeg_decompress_struct);
|
39
|
-
jpeg->error = (void *)ALLOC(struct jpeg_error_mgr);
|
40
|
-
jpeg->read->err = jpeg_std_error(jpeg->error);
|
41
|
-
jpeg->error->error_exit = jpeg_jpeg_exit;
|
42
|
-
jpeg_create_decompress(jpeg->read);
|
43
|
-
|
44
|
-
return Data_Wrap_Struct(klass, jpeg_jpeg_mark, jpeg_jpeg_free, jpeg);
|
45
|
-
}
|
46
|
-
|
47
|
-
static void jpeg_jpeg_mark(struct jpeg_jpeg *p) {
|
48
|
-
|
49
|
-
}
|
50
|
-
|
51
|
-
static void jpeg_jpeg_free(struct jpeg_jpeg *p) {
|
52
|
-
if (p->read) {
|
53
|
-
jpeg_destroy_decompress(p->read);
|
54
|
-
xfree(p->read);
|
55
|
-
}
|
56
|
-
if (p->error) {
|
57
|
-
xfree(p->error);
|
58
|
-
}
|
59
|
-
xfree(p);
|
60
|
-
}
|
61
|
-
|
62
|
-
static VALUE jpeg_jpeg_s_open(int argc, VALUE *argv, VALUE self) {
|
63
|
-
VALUE path;
|
64
|
-
VALUE jpeg;
|
65
|
-
struct jpeg_jpeg *p_jpeg;
|
66
|
-
int errorp;
|
67
|
-
FILE *fp;
|
68
|
-
rb_scan_args(argc, argv, "1", &path);
|
69
|
-
Check_Type(path, T_STRING);
|
70
|
-
|
71
|
-
jpeg = rb_funcall(Jpeg, rb_intern("new"), 0);
|
72
|
-
Data_Get_Struct(jpeg, struct jpeg_jpeg, p_jpeg);
|
73
|
-
|
74
|
-
if ((fp = fopen(RSTRING_PTR(path), "rb")) == NULL) {
|
75
|
-
rb_raise(rb_eRuntimeError, "Open file failed");
|
76
|
-
}
|
77
|
-
jpeg_stdio_src(p_jpeg->read, fp);
|
78
|
-
|
79
|
-
jpeg_read_header(p_jpeg->read, TRUE);
|
80
|
-
jpeg_start_decompress(p_jpeg->read);
|
81
|
-
fclose(fp);
|
82
|
-
return jpeg;
|
83
|
-
}
|
84
|
-
|
85
|
-
static VALUE jpeg_jpeg_width(VALUE self) {
|
86
|
-
struct jpeg_jpeg *p_jpeg;
|
87
|
-
Data_Get_Struct(self, struct jpeg_jpeg, p_jpeg);
|
88
|
-
return rb_int_new(p_jpeg->read->output_width);
|
89
|
-
}
|
90
|
-
|
91
|
-
static VALUE jpeg_jpeg_height(VALUE self) {
|
92
|
-
struct jpeg_jpeg *p_jpeg;
|
93
|
-
Data_Get_Struct(self, struct jpeg_jpeg, p_jpeg);
|
94
|
-
return rb_int_new(p_jpeg->read->output_height);
|
95
|
-
}
|
96
|
-
|
97
|
-
static VALUE jpeg_jpeg_size(VALUE self) {
|
98
|
-
struct jpeg_jpeg *p_jpeg;
|
99
|
-
VALUE array;
|
100
|
-
Data_Get_Struct(self, struct jpeg_jpeg, p_jpeg);
|
101
|
-
|
102
|
-
array = rb_ary_new();
|
103
|
-
rb_ary_push(array, rb_int_new(p_jpeg->read->output_width));
|
104
|
-
rb_ary_push(array, rb_int_new(p_jpeg->read->output_height));
|
105
|
-
|
106
|
-
return array;
|
107
|
-
}
|
108
|
-
|
109
|
-
static VALUE jpeg_jpeg_color_info(VALUE self) {
|
110
|
-
struct jpeg_jpeg *p_jpeg;
|
111
|
-
|
112
|
-
Data_Get_Struct(self, struct jpeg_jpeg, p_jpeg);
|
113
|
-
return ID2SYM(rb_intern( p_jpeg->read->out_color_components == 3 ? "rgb" : "gray" ));
|
114
|
-
}
|