webp-ffi 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -64,6 +64,14 @@ int webp_encode(const char *in_file, const char *out_file, const FfiWebpEncodeCo
64
64
  if (encode_config->lossless == 0 || encode_config->lossless == 1){
65
65
  config.lossless = encode_config->lossless;
66
66
  }
67
+
68
+ #if (ENC_MAJ_VERSION == 0 && ENC_MIN_VERSION > 4) || ENC_MAJ_VERSION > 0
69
+ if (encode_config->near_lossless >= 0 && encode_config->near_lossless <= 100){
70
+ config.near_lossless = encode_config->near_lossless;
71
+ config.lossless = 1; // use near-lossless only with lossless
72
+ }
73
+ #endif
74
+
67
75
  if (encode_config->quality >= 0 && encode_config->quality <= 100){
68
76
  config.quality = encode_config->quality;
69
77
  }
@@ -288,4 +296,4 @@ int test_c(int n) {
288
296
 
289
297
  #if defined(__cplusplus) || defined(c_plusplus)
290
298
  } // extern "C"
291
- #endif
299
+ #endif
@@ -7,6 +7,7 @@ extern "C" {
7
7
 
8
8
  typedef struct {
9
9
  int lossless; // Lossless encoding (0=lossy(default), 1=lossless).
10
+ int near_lossless; // use near-lossless image preprocessing (0..100=off)
10
11
  float quality; // between 0 (smallest file) and 100 (biggest)
11
12
  int method; // quality/speed trade-off (0=fast, 6=slower-better)
12
13
 
@@ -42,7 +43,7 @@ extern "C" {
42
43
  int crop_x, crop_y, crop_w, crop_h;
43
44
  int resize_w, resize_h;
44
45
  } FfiWebpEncodeConfig;
45
-
46
+
46
47
  typedef struct {
47
48
  OutputFileFormat output_format;
48
49
  int bypass_filtering; // if true, skip the in-loop filtering
@@ -51,7 +52,7 @@ extern "C" {
51
52
  int resize_w, resize_h;
52
53
  int use_threads; // if true, use multi-threaded decoding
53
54
  } FfiWebpDecodeConfig;
54
-
55
+
55
56
 
56
57
  void decoder_version(char *version);
57
58
  void encoder_version(char *version);
@@ -64,4 +65,4 @@ extern "C" {
64
65
  } // extern "C"
65
66
  #endif
66
67
 
67
- #endif /* _WEBP_FFI_H_ */
68
+ #endif /* _WEBP_FFI_H_ */
data/lib/webp/c.rb CHANGED
@@ -12,6 +12,7 @@ module WebP
12
12
  # struct
13
13
  class FfiWebpEncodeConfig < FFI::Struct
14
14
  layout :lossless, :int,
15
+ :near_lossless, :int,
15
16
  :quality, :float,
16
17
  :method, :int,
17
18
  :target_size, :int,
data/lib/webp/options.rb CHANGED
@@ -8,7 +8,7 @@ module WebP
8
8
  def encode_pointer
9
9
  options_pointer = FFI::MemoryPointer.new :char, C::FfiWebpEncodeConfig.size, false
10
10
  options_struct = C::FfiWebpEncodeConfig.new options_pointer
11
- [:lossless, :method, :target_size, :target_PSNR, :segments,
11
+ [:lossless, :near_lossless, :method, :target_size, :target_PSNR, :segments,
12
12
  :sns_strength, :filter_strength, :filter_sharpness,
13
13
  :filter_type, :autofilter, :alpha_compression, :alpha_filtering,
14
14
  :alpha_quality, :pass, :show_compressed, :preprocessing, :partitions,
data/lib/webp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module WebP
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
data/spec/travis_build.sh CHANGED
@@ -1,8 +1,6 @@
1
1
  #/usr/bin/env sh
2
- wget http://webp.googlecode.com/files/libwebp-0.4.0.tar.gz
3
- tar xvzf libwebp-0.4.0.tar.gz
4
- cd libwebp-0.4.0
5
- ./configure
6
- make
7
- sudo make install
8
- sudo ln -fs /usr/local/lib/libwebp.* /usr/lib/
2
+ wget http://downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP_VERSION.tar.gz
3
+ tar xvzf libwebp-$LIBWEBP_VERSION.tar.gz
4
+ cd libwebp-$LIBWEBP_VERSION
5
+ ./configure --prefix=$HOME/opt
6
+ make && make install
@@ -79,21 +79,33 @@ describe WebP do
79
79
  it "#{image}.png image" do
80
80
  in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.png"))
81
81
  out_filename = File.expand_path(File.join(@out_dir, "#{image}.png.webp"))
82
- expect(WebP.encode(in_filename, out_filename)).to be_true
82
+ expect(WebP.encode(in_filename, out_filename)).to be_truthy
83
+ end
84
+
85
+ it "#{image}.png image with near_lossless" do
86
+ in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.png"))
87
+ out_filename = File.expand_path(File.join(@out_dir, "#{image}_near_lossless.png.webp"))
88
+ expect(WebP.encode(in_filename, out_filename, near_lossless: 60)).to be_truthy
83
89
  end
84
90
  end
85
91
  factories[:jpg].each do |image|
86
92
  it "#{image}.jpg image" do
87
93
  in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.jpg"))
88
94
  out_filename = File.expand_path(File.join(@out_dir, "#{image}.jpg.webp"))
89
- expect(WebP.encode(in_filename, out_filename)).to be_true
95
+ expect(WebP.encode(in_filename, out_filename)).to be_truthy
96
+ end
97
+
98
+ it "#{image}.jpg image with near_lossless" do
99
+ in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.jpg"))
100
+ out_filename = File.expand_path(File.join(@out_dir, "#{image}_near_lossless.jpg.webp"))
101
+ expect(WebP.encode(in_filename, out_filename, near_lossless: 60)).to be_truthy
90
102
  end
91
103
  end
92
104
  factories[:tiff].each do |image|
93
105
  it "#{image}.tif image" do
94
106
  in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.tif"))
95
107
  out_filename = File.expand_path(File.join(@out_dir, "#{image}.tif.webp"))
96
- expect(WebP.encode(in_filename, out_filename)).to be_true
108
+ expect(WebP.encode(in_filename, out_filename)).to be_truthy
97
109
  end
98
110
  end
99
111
  factories[:webp].each do |image|
@@ -128,7 +140,7 @@ describe WebP do
128
140
  it "#{image}.webp image" do
129
141
  in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.webp"))
130
142
  out_filename = File.expand_path(File.join(@out_dir, "#{image}.webp.png"))
131
- expect(WebP.decode(in_filename, out_filename)).to be_true
143
+ expect(WebP.decode(in_filename, out_filename)).to be_truthy
132
144
  end
133
145
  end
134
146
  context "with output_format" do
@@ -137,7 +149,7 @@ describe WebP do
137
149
  it "#{image}.webp image to #{output_format}" do
138
150
  in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.webp"))
139
151
  out_filename = File.expand_path(File.join(@out_dir, "#{image}.#{output_format}.png"))
140
- expect(WebP.decode(in_filename, out_filename, output_format: output_format)).to be_true
152
+ expect(WebP.decode(in_filename, out_filename, output_format: output_format)).to be_truthy
141
153
  end
142
154
  end
143
155
  end
@@ -147,12 +159,12 @@ describe WebP do
147
159
  it "#{image}.webp image to png and crop" do
148
160
  in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.webp"))
149
161
  out_filename = File.expand_path(File.join(@out_dir, "#{image}_crop.png"))
150
- expect(WebP.decode(in_filename, out_filename, crop_w: 200, crop_h: 200)).to be_true
162
+ expect(WebP.decode(in_filename, out_filename, crop_w: 200, crop_h: 200)).to be_truthy
151
163
  end
152
164
  it "#{image}.webp image to png and scale" do
153
165
  in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.webp"))
154
166
  out_filename = File.expand_path(File.join(@out_dir, "#{image}_resize.png"))
155
- expect(WebP.decode(in_filename, out_filename, resize_w: 200, resize_h: 200)).to be_true
167
+ expect(WebP.decode(in_filename, out_filename, resize_w: 200, resize_h: 200)).to be_truthy
156
168
  end
157
169
  end
158
170
  end
@@ -176,4 +188,4 @@ describe WebP do
176
188
  end
177
189
  end
178
190
 
179
- end
191
+ end
data/webp-ffi.gemspec CHANGED
@@ -24,5 +24,5 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_development_dependency "bundler", ">= 1.2"
26
26
  spec.add_development_dependency "rake"
27
- spec.add_development_dependency "rspec", ">= 2.14.0"
27
+ spec.add_development_dependency "rspec", ">= 3"
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webp-ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Vasyliev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-05 00:00:00.000000000 Z
11
+ date: 2021-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 2.14.0
75
+ version: '3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 2.14.0
82
+ version: '3'
83
83
  description: Ruby wrapper for libwebp
84
84
  email:
85
85
  - leopard.not.a@gmail.com
@@ -97,6 +97,12 @@ files:
97
97
  - README.md
98
98
  - Rakefile
99
99
  - ext/webp_ffi/Rakefile
100
+ - ext/webp_ffi/jpegdec.c
101
+ - ext/webp_ffi/jpegdec.h
102
+ - ext/webp_ffi/pngdec.c
103
+ - ext/webp_ffi/pngdec.h
104
+ - ext/webp_ffi/tiffdec.c
105
+ - ext/webp_ffi/tiffdec.h
100
106
  - ext/webp_ffi/util.c
101
107
  - ext/webp_ffi/util.h
102
108
  - ext/webp_ffi/webp_ffi.c
@@ -127,7 +133,7 @@ homepage: http://leopard.in.ua/webp-ffi
127
133
  licenses:
128
134
  - MIT
129
135
  metadata: {}
130
- post_install_message:
136
+ post_install_message:
131
137
  rdoc_options: []
132
138
  require_paths:
133
139
  - lib
@@ -142,9 +148,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
148
  - !ruby/object:Gem::Version
143
149
  version: '0'
144
150
  requirements: []
145
- rubyforge_project:
146
- rubygems_version: 2.2.1
147
- signing_key:
151
+ rubygems_version: 3.1.2
152
+ signing_key:
148
153
  specification_version: 4
149
154
  summary: Ruby wrapper for libwebp
150
155
  test_files: