libjpeg-ruby 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +72 -0
- data/ext/jpeg/jpeg.c +50 -4
- data/lib/jpeg/version.rb +1 -1
- data/libjpeg-ruby.gemspec +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29398bd546766eb9b4c660c7e9b71910debbfc065e2a6e66377b4448cd73d7ae
|
4
|
+
data.tar.gz: 4e1e5521b1c2ad8dd45b47bca048eb446e72ef7d76a84e97ea36929a9cbbbddb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8140f6bf923073df861bf86d70c37e45360c8b34af33b5bab448e4564d3184b438597689d5276bc5d4a7956caef05d33d3525495e7fe6a136ab3d74c7024a14
|
7
|
+
data.tar.gz: 84efbe3208cb7ce49afd0000fe8814944f7c81fb19c490567436f201953a61a7f3f0245c18c11d8b7ec2d8b7bd3edd53ba181ecbc4b98a5e8155d7003979dcab
|
data/README.md
CHANGED
@@ -1,2 +1,74 @@
|
|
1
1
|
# libjpeg-ruby
|
2
2
|
libjpeg interface for ruby.
|
3
|
+
|
4
|
+
## Installation
|
5
|
+
|
6
|
+
```ruby
|
7
|
+
gem 'libjpeg-ruby'
|
8
|
+
```
|
9
|
+
|
10
|
+
And then execute:
|
11
|
+
|
12
|
+
$ bundle
|
13
|
+
|
14
|
+
Or install it yourself as:
|
15
|
+
|
16
|
+
$ gem install libjpeg-ruby
|
17
|
+
|
18
|
+
## Usage
|
19
|
+
|
20
|
+
### decode sample
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
require 'jpeg'
|
24
|
+
|
25
|
+
dec = JPEG::Decoder.new(:pixel_format => :BGR)
|
26
|
+
|
27
|
+
p dec.read_header(IO.binread("test.jpg")
|
28
|
+
|
29
|
+
raw = dec << IO.binread("test.jpg")
|
30
|
+
p raw.meta
|
31
|
+
|
32
|
+
IO.binwrite("test.bgr", raw)
|
33
|
+
```
|
34
|
+
|
35
|
+
#### decode options
|
36
|
+
| option | value type | description |
|
37
|
+
|---|---|---|
|
38
|
+
| :pixel_format | String or Symbol | output format |
|
39
|
+
| :output_gamma | Float | gamma value |
|
40
|
+
| :fancy_upsampling | Boolean | T.B.D |
|
41
|
+
| :do_smoothing | Boolean | T.B.D |
|
42
|
+
| :opt_dither | [{str}MODE, {bool}2PASS, {int}NUM_COLORS] | T.B.D |
|
43
|
+
| :use_1ass_quantizer | Boolean | T.B.D |
|
44
|
+
| :use_external_colormap | Boolean | T.B.D |
|
45
|
+
| :use_2pass_quantizer | Boolean | T.B.D |
|
46
|
+
| :without_meta | Boolean | T.B.D |
|
47
|
+
| :expand_colormap | Booblean | T.B.D |
|
48
|
+
| :scale | Rational or Float | T.B.D |
|
49
|
+
| :dct_method | String or Symbol | T.B.D |
|
50
|
+
|
51
|
+
#### supported output format
|
52
|
+
RGB RGB24 YUV422 YUYV RGB565 YUV444 YCbCr BGR BGR24 RGBX RGB32 BGRX BGR32
|
53
|
+
|
54
|
+
#### supported DCT method
|
55
|
+
ISLOW IFAST FLOAT FASTEST
|
56
|
+
|
57
|
+
### encode sample
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
require 'jpeg'
|
61
|
+
|
62
|
+
enc = JPEG::Encoder.new(640, 480, :pixel_format => :YCbCr)
|
63
|
+
|
64
|
+
IO.binwrite("test.jpg", enc << IO.binread("test.raw"))
|
65
|
+
```
|
66
|
+
#### encode option
|
67
|
+
#### encode options
|
68
|
+
| option | value type | description |
|
69
|
+
|---|---|---|
|
70
|
+
| :pixel_fromat | String or Symbol | input format |
|
71
|
+
| :quality | Integer | encode quality (0-100) |
|
72
|
+
| :scale | Rational or Float | |
|
73
|
+
| :dct_method | String or Symbol | T.B.D |
|
74
|
+
|
data/ext/jpeg/jpeg.c
CHANGED
@@ -82,6 +82,7 @@ static const char* encoder_opts_keys[] = {
|
|
82
82
|
"pixel_format", // {str}
|
83
83
|
"quality", // {integer}
|
84
84
|
"scale", // {rational} or {float}
|
85
|
+
"dct_method" // {str}
|
85
86
|
};
|
86
87
|
|
87
88
|
static ID encoder_opts_ids[N(encoder_opts_keys)];
|
@@ -92,6 +93,7 @@ typedef struct {
|
|
92
93
|
int height;
|
93
94
|
|
94
95
|
int data_size;
|
96
|
+
J_DCT_METHOD dct_method;
|
95
97
|
|
96
98
|
struct jpeg_compress_struct cinfo;
|
97
99
|
struct jpeg_error_mgr jerr;
|
@@ -112,6 +114,7 @@ static const char* decoder_opts_keys[] = {
|
|
112
114
|
"without_meta", // {bool}
|
113
115
|
"expand_colormap", // {bool}
|
114
116
|
"scale", // {rational} or {float}
|
117
|
+
"dct_method" // {str}
|
115
118
|
};
|
116
119
|
|
117
120
|
static ID decoder_opts_ids[N(decoder_opts_keys)];
|
@@ -138,6 +141,7 @@ typedef struct {
|
|
138
141
|
boolean do_block_smoothing;
|
139
142
|
boolean quantize_colors;
|
140
143
|
J_DITHER_MODE dither_mode;
|
144
|
+
J_DCT_METHOD dct_method;
|
141
145
|
boolean two_pass_quantize;
|
142
146
|
int desired_number_of_colors;
|
143
147
|
boolean enable_1pass_quant;
|
@@ -191,6 +195,8 @@ rb_encoder_alloc(VALUE self)
|
|
191
195
|
ptr = ALLOC(jpeg_encode_t);
|
192
196
|
memset(ptr, 0, sizeof(*ptr));
|
193
197
|
|
198
|
+
ptr->dct_method = JDCT_FASTEST;
|
199
|
+
|
194
200
|
return Data_Wrap_Struct(encoder_klass, 0, rb_encoder_free, ptr);
|
195
201
|
}
|
196
202
|
|
@@ -314,6 +320,24 @@ set_encoder_context(jpeg_encode_t* ptr, int wd, int ht, VALUE opt)
|
|
314
320
|
break;
|
315
321
|
}
|
316
322
|
|
323
|
+
/*
|
324
|
+
* eval dct_method option
|
325
|
+
*/
|
326
|
+
if (opts[3] == Qundef || EQ_STR(opts[3], "FASTEST")) {
|
327
|
+
ptr->dct_method = JDCT_FASTEST;
|
328
|
+
|
329
|
+
} else if (EQ_STR(opts[3], "ISLOW")) {
|
330
|
+
ptr->dct_method = JDCT_ISLOW;
|
331
|
+
|
332
|
+
} else if (EQ_STR(opts[3], "IFAST")) {
|
333
|
+
ptr->dct_method = JDCT_IFAST;
|
334
|
+
|
335
|
+
} else if (EQ_STR(opts[3], "FLOAT")) {
|
336
|
+
ptr->dct_method = JDCT_FLOAT;
|
337
|
+
|
338
|
+
} else {
|
339
|
+
ARGUMENT_ERROR("Unsupportd :dct_method option value.");
|
340
|
+
}
|
317
341
|
|
318
342
|
/*
|
319
343
|
* set context
|
@@ -343,7 +367,7 @@ set_encoder_context(jpeg_encode_t* ptr, int wd, int ht, VALUE opt)
|
|
343
367
|
ptr->cinfo.optimize_coding = TRUE;
|
344
368
|
ptr->cinfo.arith_code = TRUE;
|
345
369
|
ptr->cinfo.raw_data_in = FALSE;
|
346
|
-
ptr->cinfo.dct_method =
|
370
|
+
ptr->cinfo.dct_method = ptr->dct_method;
|
347
371
|
|
348
372
|
jpeg_set_defaults(&ptr->cinfo);
|
349
373
|
jpeg_set_quality(&ptr->cinfo, quality, TRUE);
|
@@ -642,6 +666,7 @@ rb_decoder_alloc(VALUE self)
|
|
642
666
|
ptr->do_block_smoothing = FALSE;
|
643
667
|
ptr->quantize_colors = FALSE;
|
644
668
|
ptr->dither_mode = JDITHER_NONE;
|
669
|
+
ptr->dct_method = JDCT_FASTEST;
|
645
670
|
ptr->desired_number_of_colors = 0;
|
646
671
|
ptr->enable_1pass_quant = FALSE;
|
647
672
|
ptr->enable_external_quant = FALSE;
|
@@ -969,6 +994,28 @@ eval_decoder_opt_scale(jpeg_decode_t* ptr, VALUE opt)
|
|
969
994
|
}
|
970
995
|
}
|
971
996
|
|
997
|
+
static void
|
998
|
+
eval_decoder_opt_dct_method(jpeg_decode_t* ptr, VALUE opt)
|
999
|
+
{
|
1000
|
+
if (opt != Qundef) {
|
1001
|
+
if (EQ_STR(opt, "ISLOW")) {
|
1002
|
+
ptr->dct_method = JDCT_ISLOW;
|
1003
|
+
|
1004
|
+
} else if (EQ_STR(opt, "IFAST")) {
|
1005
|
+
ptr->dct_method = JDCT_IFAST;
|
1006
|
+
|
1007
|
+
} else if (EQ_STR(opt, "FLOAT")) {
|
1008
|
+
ptr->dct_method = JDCT_FLOAT;
|
1009
|
+
|
1010
|
+
} else if (EQ_STR(opt, "FASTEST")) {
|
1011
|
+
ptr->dct_method = JDCT_FASTEST;
|
1012
|
+
|
1013
|
+
} else {
|
1014
|
+
ARGUMENT_ERROR("Unsupportd :dct_method option value.");
|
1015
|
+
}
|
1016
|
+
}
|
1017
|
+
}
|
1018
|
+
|
972
1019
|
static void
|
973
1020
|
set_decoder_context( jpeg_decode_t* ptr, VALUE opt)
|
974
1021
|
{
|
@@ -990,11 +1037,10 @@ set_decoder_context( jpeg_decode_t* ptr, VALUE opt)
|
|
990
1037
|
eval_decoder_opt_use_1pass_quantizer(ptr, opts[5]);
|
991
1038
|
eval_decoder_opt_use_external_colormap(ptr, opts[6]);
|
992
1039
|
eval_decoder_opt_use_2pass_quantizer(ptr, opts[7]);
|
993
|
-
|
994
1040
|
eval_decoder_opt_without_meta(ptr, opts[8]);
|
995
1041
|
eval_decoder_opt_expand_colormap(ptr, opts[9]);
|
996
|
-
|
997
1042
|
eval_decoder_opt_scale(ptr, opts[10]);
|
1043
|
+
eval_decoder_opt_dct_method(ptr, opts[11]);
|
998
1044
|
}
|
999
1045
|
|
1000
1046
|
static VALUE
|
@@ -1336,7 +1382,7 @@ do_decode(jpeg_decode_t* ptr, uint8_t* jpg, size_t jpg_sz)
|
|
1336
1382
|
jpeg_read_header(cinfo, TRUE);
|
1337
1383
|
|
1338
1384
|
cinfo->raw_data_out = FALSE;
|
1339
|
-
cinfo->dct_method =
|
1385
|
+
cinfo->dct_method = ptr->dct_method;
|
1340
1386
|
|
1341
1387
|
cinfo->out_color_space = ptr->out_color_space;
|
1342
1388
|
cinfo->out_color_components = ptr->out_color_components;
|
data/lib/jpeg/version.rb
CHANGED
data/libjpeg-ruby.gemspec
CHANGED
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.extensions = ["ext/jpeg/extconf.rb"]
|
32
32
|
spec.require_paths = ["lib"]
|
33
33
|
|
34
|
+
spec.required_ruby_version = ">= 2.4.0"
|
35
|
+
|
34
36
|
spec.add_development_dependency "bundler", "~> 1.17"
|
35
37
|
spec.add_development_dependency "rake", "~> 10.0"
|
36
38
|
spec.add_development_dependency "rake-compiler"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libjpeg-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroshi Kuwagata
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,7 +81,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
81
|
requirements:
|
82
82
|
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
84
|
+
version: 2.4.0
|
85
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|