webp-ffi 0.1.8 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4faf9be4b898c23d0b6b8c035046f6b659878652
4
- data.tar.gz: a3a0c25ecca3b5d402a4abac31f8f279a6ee1192
3
+ metadata.gz: e31c8360882b799459efbb17d02a0c8c05182264
4
+ data.tar.gz: ad4344c8ce850645cc5f092d627e40860a2e4ae5
5
5
  SHA512:
6
- metadata.gz: d44c413f3e4b72eb08377f179d6a0ada43549d36d5b3baf79ce38e4cb6e03f4ea6245937ea9edb53fd615c7abc5f59aeb873ab7c648c89293a884912d9b79f37
7
- data.tar.gz: 123198f82ddfe778ab72614696afa54fbf7fb88497d1a4ef1107feb262cdcd4d9d322f008be36f580b5cd192b2dc6eb91fce5d352789f3a077d588ddb1c0b2c0
6
+ metadata.gz: 9ebce606526ecd0e5e715f3f83e259ef43dba995dc07cda35fb7d8dbf16e38aadf7171c9092ec5809613cf8073af8251a44539ff51446c2161c42f3912e1c3c5
7
+ data.tar.gz: dced6dcbbad67660e1b531317f60af8dcbcac734b2757baad107972e29ed4ed346445e6841f1f852a1909e006d4fff9c4856205935881e57604fb779b881745f
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.1.0
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
+ ## v0.2.0
2
+
3
+ * Checked and fixed for webp 0.4.0
4
+
1
5
  ## v0.1.8
2
6
 
3
- * Fix decoder options (it was not working fully)
7
+ * Fix encoder options (didn't work fully)
4
8
 
5
9
  ## v0.1.7
6
10
 
data/README.md CHANGED
@@ -13,21 +13,21 @@ WebP is a new image format that provides lossless and lossy compression for imag
13
13
 
14
14
  ### Requirements
15
15
 
16
- First of all you should have install libraries: libpng, libjpeg and libwebp (for libwebp need libpng and libjpeg).
16
+ First of all you should have install libraries: libpng, libjpeg and libtiff.
17
17
 
18
- For ubuntu, debian:
18
+ For Ubuntu, Debian:
19
19
 
20
20
  sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
21
21
 
22
22
  For Mac OS:
23
23
 
24
- sudo port install jpeg libpng tiff
24
+ brew install libjpg libpng libtiff webp
25
25
 
26
- or:
26
+ or (for MacPorts):
27
27
 
28
- brew install libjpg libpng libtiff
28
+ sudo port install jpeg libpng tiff
29
29
 
30
- Next, you should [install libwebp](https://developers.google.com/speed/webp/docs/compiling).
30
+ Next, you should [install libwebp](https://developers.google.com/speed/webp/docs/compiling) (if you didn't install it by `brew` in Mac OS). This gem is not support Windows systems (sorry).
31
31
 
32
32
  ### Final part
33
33
 
data/ext/webp_ffi/util.c CHANGED
@@ -280,6 +280,146 @@ static int UtilWritePPM(FILE* fout, const WebPDecBuffer* const buffer, int alpha
280
280
  return 1;
281
281
  }
282
282
 
283
+ static void PutLE16(uint8_t* const dst, uint32_t value) {
284
+ dst[0] = (value >> 0) & 0xff;
285
+ dst[1] = (value >> 8) & 0xff;
286
+ }
287
+
288
+ static void PutLE32(uint8_t* const dst, uint32_t value) {
289
+ PutLE16(dst + 0, (value >> 0) & 0xffff);
290
+ PutLE16(dst + 2, (value >> 16) & 0xffff);
291
+ }
292
+
293
+ #define BMP_HEADER_SIZE 54
294
+ static int UtilWriteBMP(FILE* fout, const WebPDecBuffer* const buffer) {
295
+ const int has_alpha = (buffer->colorspace != MODE_BGR);
296
+ const uint32_t width = buffer->width;
297
+ const uint32_t height = buffer->height;
298
+ const uint8_t* const rgba = buffer->u.RGBA.rgba;
299
+ const int stride = buffer->u.RGBA.stride;
300
+ const uint32_t bytes_per_px = has_alpha ? 4 : 3;
301
+ uint32_t y;
302
+ const uint32_t line_size = bytes_per_px * width;
303
+ const uint32_t bmp_stride = (line_size + 3) & ~3; // pad to 4
304
+ const uint32_t total_size = bmp_stride * height + BMP_HEADER_SIZE;
305
+ uint8_t bmp_header[BMP_HEADER_SIZE] = { 0 };
306
+
307
+ // bitmap file header
308
+ PutLE16(bmp_header + 0, 0x4d42); // signature 'BM'
309
+ PutLE32(bmp_header + 2, total_size); // size including header
310
+ PutLE32(bmp_header + 6, 0); // reserved
311
+ PutLE32(bmp_header + 10, BMP_HEADER_SIZE); // offset to pixel array
312
+ // bitmap info header
313
+ PutLE32(bmp_header + 14, 40); // DIB header size
314
+ PutLE32(bmp_header + 18, width); // dimensions
315
+ PutLE32(bmp_header + 22, -(int)height); // vertical flip!
316
+ PutLE16(bmp_header + 26, 1); // number of planes
317
+ PutLE16(bmp_header + 28, bytes_per_px * 8); // bits per pixel
318
+ PutLE32(bmp_header + 30, 0); // no compression (BI_RGB)
319
+ PutLE32(bmp_header + 34, 0); // image size (dummy)
320
+ PutLE32(bmp_header + 38, 2400); // x pixels/meter
321
+ PutLE32(bmp_header + 42, 2400); // y pixels/meter
322
+ PutLE32(bmp_header + 46, 0); // number of palette colors
323
+ PutLE32(bmp_header + 50, 0); // important color count
324
+
325
+ // TODO(skal): color profile
326
+
327
+ // write header
328
+ if (fwrite(bmp_header, sizeof(bmp_header), 1, fout) != 1) {
329
+ return 0;
330
+ }
331
+
332
+ // write pixel array
333
+ for (y = 0; y < height; ++y) {
334
+ if (fwrite(rgba + y * stride, line_size, 1, fout) != 1) {
335
+ return 0;
336
+ }
337
+ // write padding zeroes
338
+ if (bmp_stride != line_size) {
339
+ const uint8_t zeroes[3] = { 0 };
340
+ if (fwrite(zeroes, bmp_stride - line_size, 1, fout) != 1) {
341
+ return 0;
342
+ }
343
+ }
344
+ }
345
+ return 1;
346
+ }
347
+ #undef BMP_HEADER_SIZE
348
+
349
+ #define NUM_IFD_ENTRIES 15
350
+ #define EXTRA_DATA_SIZE 16
351
+ // 10b for signature/header + n * 12b entries + 4b for IFD terminator:
352
+ #define EXTRA_DATA_OFFSET (10 + 12 * NUM_IFD_ENTRIES + 4)
353
+ #define TIFF_HEADER_SIZE (EXTRA_DATA_OFFSET + EXTRA_DATA_SIZE)
354
+
355
+ static int UtilWriteTIFF(FILE* fout, const WebPDecBuffer* const buffer) {
356
+ const int has_alpha = (buffer->colorspace != MODE_RGB);
357
+ const uint32_t width = buffer->width;
358
+ const uint32_t height = buffer->height;
359
+ const uint8_t* const rgba = buffer->u.RGBA.rgba;
360
+ const int stride = buffer->u.RGBA.stride;
361
+ const uint8_t bytes_per_px = has_alpha ? 4 : 3;
362
+ // For non-alpha case, we omit tag 0x152 (ExtraSamples).
363
+ const uint8_t num_ifd_entries = has_alpha ? NUM_IFD_ENTRIES
364
+ : NUM_IFD_ENTRIES - 1;
365
+ uint8_t tiff_header[TIFF_HEADER_SIZE] = {
366
+ 0x49, 0x49, 0x2a, 0x00, // little endian signature
367
+ 8, 0, 0, 0, // offset to the unique IFD that follows
368
+ // IFD (offset = 8). Entries must be written in increasing tag order.
369
+ num_ifd_entries, 0, // Number of entries in the IFD (12 bytes each).
370
+ 0x00, 0x01, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, // 10: Width (TBD)
371
+ 0x01, 0x01, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, // 22: Height (TBD)
372
+ 0x02, 0x01, 3, 0, bytes_per_px, 0, 0, 0, // 34: BitsPerSample: 8888
373
+ EXTRA_DATA_OFFSET + 0, 0, 0, 0,
374
+ 0x03, 0x01, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, // 46: Compression: none
375
+ 0x06, 0x01, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, // 58: Photometric: RGB
376
+ 0x11, 0x01, 4, 0, 1, 0, 0, 0, // 70: Strips offset:
377
+ TIFF_HEADER_SIZE, 0, 0, 0, // data follows header
378
+ 0x12, 0x01, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, // 82: Orientation: topleft
379
+ 0x15, 0x01, 3, 0, 1, 0, 0, 0, // 94: SamplesPerPixels
380
+ bytes_per_px, 0, 0, 0,
381
+ 0x16, 0x01, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, // 106: Rows per strip (TBD)
382
+ 0x17, 0x01, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, // 118: StripByteCount (TBD)
383
+ 0x1a, 0x01, 5, 0, 1, 0, 0, 0, // 130: X-resolution
384
+ EXTRA_DATA_OFFSET + 8, 0, 0, 0,
385
+ 0x1b, 0x01, 5, 0, 1, 0, 0, 0, // 142: Y-resolution
386
+ EXTRA_DATA_OFFSET + 8, 0, 0, 0,
387
+ 0x1c, 0x01, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, // 154: PlanarConfiguration
388
+ 0x28, 0x01, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, // 166: ResolutionUnit (inch)
389
+ 0x52, 0x01, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, // 178: ExtraSamples: rgbA
390
+ 0, 0, 0, 0, // 190: IFD terminator
391
+ // EXTRA_DATA_OFFSET:
392
+ 8, 0, 8, 0, 8, 0, 8, 0, // BitsPerSample
393
+ 72, 0, 0, 0, 1, 0, 0, 0 // 72 pixels/inch, for X/Y-resolution
394
+ };
395
+ uint32_t y;
396
+
397
+ // Fill placeholders in IFD:
398
+ PutLE32(tiff_header + 10 + 8, width);
399
+ PutLE32(tiff_header + 22 + 8, height);
400
+ PutLE32(tiff_header + 106 + 8, height);
401
+ PutLE32(tiff_header + 118 + 8, width * bytes_per_px * height);
402
+ if (!has_alpha) PutLE32(tiff_header + 178, 0); // IFD terminator
403
+
404
+ // write header
405
+ if (fwrite(tiff_header, sizeof(tiff_header), 1, fout) != 1) {
406
+ return 0;
407
+ }
408
+ // write pixel values
409
+ for (y = 0; y < height; ++y) {
410
+ if (fwrite(rgba + y * stride, bytes_per_px, width, fout) != width) {
411
+ return 0;
412
+ }
413
+ }
414
+
415
+ return 1;
416
+ }
417
+
418
+ #undef TIFF_HEADER_SIZE
419
+ #undef EXTRA_DATA_OFFSET
420
+ #undef EXTRA_DATA_SIZE
421
+ #undef NUM_IFD_ENTRIES
422
+
283
423
  static int UtilWriteAlphaPlane(FILE* fout, const WebPDecBuffer* const buffer) {
284
424
  const uint32_t width = buffer->width;
285
425
  const uint32_t height = buffer->height;
@@ -389,11 +529,11 @@ static InputFileFormat GetImageType(FILE* in_file) {
389
529
 
390
530
  magic = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
391
531
  if (magic == 0x89504E47U) {
392
- format = PNG_;
532
+ format = iPNG_;
393
533
  } else if (magic >= 0xFFD8FF00U && magic <= 0xFFD8FFFFU) {
394
- format = JPEG_;
534
+ format = iJPEG_;
395
535
  } else if (magic == 0x49492A00 || magic == 0x4D4D002A) {
396
- format = TIFF_;
536
+ format = iTIFF_;
397
537
  }
398
538
  return format;
399
539
  }
@@ -410,11 +550,11 @@ int UtilReadPicture(const char* const filename, WebPPicture* const pic,
410
550
  if (pic->width == 0 || pic->height == 0) {
411
551
  // If no size specified, try to decode it as PNG/JPEG (as appropriate).
412
552
  const InputFileFormat format = GetImageType(in_file);
413
- if (format == PNG_) {
553
+ if (format == iPNG_) {
414
554
  ok = UtilReadPNG(in_file, pic, keep_alpha);
415
- } else if (format == JPEG_) {
555
+ } else if (format == iJPEG_) {
416
556
  ok = UtilReadJPEG(in_file, pic);
417
- } else if (format == TIFF_) {
557
+ } else if (format == iTIFF_) {
418
558
  ok = UtilReadTIFF(filename, pic, keep_alpha);
419
559
  }
420
560
  } else {
@@ -437,13 +577,17 @@ int UtilSaveOutput(const WebPDecBuffer* const buffer,
437
577
  return 0;
438
578
  }
439
579
 
440
- if (format == PNG) {
580
+ if (format == oPNG) {
441
581
  ok &= UtilWritePNG(fout, buffer);
442
- } else if (format == PAM) {
582
+ } else if (format == oPAM) {
443
583
  ok &= UtilWritePPM(fout, buffer, 1);
444
- } else if (format == PPM) {
584
+ } else if (format == oPPM) {
445
585
  ok &= UtilWritePPM(fout, buffer, 0);
446
- } else if (format == PGM) {
586
+ } else if (format == oBMP) {
587
+ ok &= UtilWriteBMP(fout, buffer);
588
+ } else if (format == oTIFF_) {
589
+ ok &= UtilWriteTIFF(fout, buffer);
590
+ } else if (format == oPGM || format == oYUV) {
447
591
  ok &= UtilWritePGM(fout, buffer);
448
592
  } else if (format == ALPHA_PLANE_ONLY) {
449
593
  ok &= UtilWriteAlphaPlane(fout, buffer);
data/ext/webp_ffi/util.h CHANGED
@@ -6,17 +6,20 @@ extern "C" {
6
6
  #endif
7
7
 
8
8
  typedef enum {
9
- PNG = 0,
10
- PAM,
11
- PPM,
12
- PGM,
9
+ oPNG = 0,
10
+ oPAM,
11
+ oPPM,
12
+ oPGM,
13
+ oBMP,
14
+ oTIFF_,
15
+ oYUV,
13
16
  ALPHA_PLANE_ONLY // this is for experimenting only
14
17
  } OutputFileFormat;
15
18
 
16
19
  typedef enum {
17
- PNG_ = 0,
18
- JPEG_,
19
- TIFF_, // 'TIFF' clashes with libtiff
20
+ iPNG_ = 0,
21
+ iJPEG_,
22
+ iTIFF_, // 'TIFF' clashes with libtiff
20
23
  UNSUPPORTED
21
24
  } InputFileFormat;
22
25
 
@@ -3,14 +3,10 @@
3
3
  #include <stdlib.h>
4
4
  #include <string.h>
5
5
 
6
- #include "webp/decode.h"
7
- #include "webp/encode.h"
8
-
9
6
  // utils
10
7
  #include "./util.h"
11
8
  #include "./webp_ffi.h"
12
9
 
13
-
14
10
  #if defined(__cplusplus) || defined(c_plusplus)
15
11
  extern "C" {
16
12
  #endif
@@ -193,7 +189,7 @@ int webp_decode(const char *in_file, const char *out_file, const FfiWebpDecodeCo
193
189
  WebPDecoderConfig config;
194
190
  WebPDecBuffer* const output_buffer = &config.output;
195
191
  WebPBitstreamFeatures* const bitstream = &config.input;
196
- OutputFileFormat format = PNG;
192
+ OutputFileFormat format = oPNG;
197
193
 
198
194
  if (!WebPInitDecoderConfig(&config)) {
199
195
  //fprintf(stderr, "Library version mismatch!\n");
@@ -239,16 +235,24 @@ int webp_decode(const char *in_file, const char *out_file, const FfiWebpDecodeCo
239
235
  }
240
236
 
241
237
  switch (format) {
242
- case PNG:
238
+ case oPNG:
243
239
  output_buffer->colorspace = bitstream->has_alpha ? MODE_RGBA : MODE_RGB;
244
240
  break;
245
- case PAM:
241
+ case oPAM:
246
242
  output_buffer->colorspace = MODE_RGBA;
247
243
  break;
248
- case PPM:
244
+ case oPPM:
249
245
  output_buffer->colorspace = MODE_RGB; // drops alpha for PPM
250
246
  break;
251
- case PGM:
247
+ case oBMP:
248
+ output_buffer->colorspace = bitstream->has_alpha ? MODE_BGRA : MODE_BGR;
249
+ break;
250
+ case oTIFF_: // note: force pre-multiplied alpha
251
+ output_buffer->colorspace =
252
+ bitstream->has_alpha ? MODE_rgbA : MODE_RGB;
253
+ break;
254
+ case oPGM:
255
+ case oYUV:
252
256
  output_buffer->colorspace = bitstream->has_alpha ? MODE_YUVA : MODE_YUV;
253
257
  break;
254
258
  case ALPHA_PLANE_ONLY:
@@ -258,6 +262,7 @@ int webp_decode(const char *in_file, const char *out_file, const FfiWebpDecodeCo
258
262
  free((void*)data);
259
263
  return 3;
260
264
  }
265
+
261
266
  status = WebPDecode(data, data_size, &config);
262
267
 
263
268
  if (status != VP8_STATUS_OK) {
data/lib/webp/c.rb CHANGED
@@ -5,6 +5,9 @@ module WebP
5
5
  :pam,
6
6
  :ppm,
7
7
  :pgm,
8
+ :bmp,
9
+ :tiff,
10
+ :yuv,
8
11
  :alpha_plane_only )
9
12
  # struct
10
13
  class FfiWebpEncodeConfig < FFI::Struct
@@ -37,7 +40,7 @@ module WebP
37
40
  :resize_w, :int,
38
41
  :resize_h, :int
39
42
  end
40
-
43
+
41
44
  class FfiWebpDecodeConfig < FFI::Struct
42
45
  layout :output_format, OutputFileFormat,
43
46
  :bypass_filtering, :int,
data/lib/webp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module WebP
2
- VERSION = "0.1.8"
2
+ VERSION = "0.2.0"
3
3
  end
data/spec/travis_build.sh CHANGED
@@ -1,7 +1,7 @@
1
1
  #/usr/bin/env sh
2
- wget http://webp.googlecode.com/files/libwebp-0.3.1.tar.gz
3
- tar xvzf libwebp-0.3.1.tar.gz
4
- cd libwebp-0.3.1
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
5
  ./configure
6
6
  make
7
7
  sudo make install
@@ -132,7 +132,7 @@ describe WebP do
132
132
  end
133
133
  end
134
134
  context "with output_format" do
135
- [:png, :pam, :ppm, :pgm, :alpha_plane_only].each do |output_format|
135
+ [:png, :pam, :ppm, :pgm, :bmp, :tiff, :yuv, :alpha_plane_only].each do |output_format|
136
136
  factories[:webp].take(2).each do |image|
137
137
  it "#{image}.webp image to #{output_format}" do
138
138
  in_filename = File.expand_path(File.join(File.dirname(__FILE__), "factories/#{image}.webp"))
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webp-ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Vasyliev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-23 00:00:00.000000000 Z
11
+ date: 2014-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.9.0
20
20
  type: :runtime
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.9.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: ffi-compiler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.1.2
34
34
  type: :runtime
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.1.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.2'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 2.14.0
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
82
  version: 2.14.0
83
83
  description: Ruby wrapper for libwebp
@@ -88,9 +88,9 @@ extensions:
88
88
  - ext/webp_ffi/Rakefile
89
89
  extra_rdoc_files: []
90
90
  files:
91
- - .gitignore
92
- - .ruby-version
93
- - .travis.yml
91
+ - ".gitignore"
92
+ - ".ruby-version"
93
+ - ".travis.yml"
94
94
  - CHANGELOG.md
95
95
  - Gemfile
96
96
  - LICENSE.txt
@@ -133,17 +133,17 @@ require_paths:
133
133
  - lib
134
134
  required_ruby_version: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  requirements:
141
- - - '>='
141
+ - - ">="
142
142
  - !ruby/object:Gem::Version
143
143
  version: '0'
144
144
  requirements: []
145
145
  rubyforge_project:
146
- rubygems_version: 2.0.3
146
+ rubygems_version: 2.2.1
147
147
  signing_key:
148
148
  specification_version: 4
149
149
  summary: Ruby wrapper for libwebp