lilimg 0.0.2 → 0.0.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/ext/lilimg/lilimg.c +49 -38
  3. data/lilimg.gemspec +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e83dd2093f90c03ce964311c52f00b0da89958b7d44e01c50957c9659a36080a
4
- data.tar.gz: 8738853fefaa819657f92429aa2e5beaf6c7b58105fd4a3b053cb4970d8500c0
3
+ metadata.gz: bdc6fc2f84a1003b4cd672530e0b9c0aefb50c8970c09bb0c0779f6d0a095a07
4
+ data.tar.gz: 630a7f496e536c17bcd1de5165e9d3981ac8a00e41e9491116399ef5fd530c7d
5
5
  SHA512:
6
- metadata.gz: ca3125f68b87fb3e53db6a292bb4ae83c7af3940b2c97ea4852dc05beb17e4d864ee5f8cad6fb547e8d30df21aed0cfb498ce9361c34a9f142745d01169448a0
7
- data.tar.gz: fc7cf2c00db10b1b98e74595b11d252642593f6736ae40f5f82c804d33dff3e3e40cdaf7a22a906dc216708f5de8f47390b81f8d318139f20e96ae78ce1ae8e0
6
+ metadata.gz: b7211d65cf200f9754e24b7f08b7e187041c4f0256dc5cff50935add105cb8d619ddbea292a4b7c9f73c516c997f1943018ecad8de770fcfd3bf17ac2acac70a
7
+ data.tar.gz: 7b9cec47e6e248bda6617eff400da2b7e43ef5c912d6faa33fbb78750b24a6910fbe9a80ae1062e3ce76ef02c168e91c85627d2ae3bc4d86dc573321c603cb0f
data/ext/lilimg/lilimg.c CHANGED
@@ -7,60 +7,71 @@
7
7
  #include "jo_gif.h"
8
8
 
9
9
  unsigned char * rgb_to_rgba(unsigned char * buf, int w, int h) {
10
- int newsize = 4 * w * h;
11
- unsigned char * dest;
12
- dest = malloc(newsize);
13
- int s = 0, d = 0;
14
- while (d < newsize) {
15
- dest[d++] = buf[s++];
16
- dest[d++] = buf[s++];
17
- dest[d++] = buf[s++];
18
- dest[d++] = 255; // fully opaque
19
- }
20
-
21
- return dest;
10
+ int newsize = 4 * w * h;
11
+ unsigned char * dest;
12
+ dest = malloc(newsize);
13
+ int s = 0, d = 0;
14
+ while (d < newsize) {
15
+ dest[d++] = buf[s++];
16
+ dest[d++] = buf[s++];
17
+ dest[d++] = buf[s++];
18
+ dest[d++] = 255; // fully opaque
19
+ }
20
+
21
+ return dest;
22
22
  }
23
23
 
24
24
  static VALUE jpeg_to_gif(VALUE self, VALUE buf) {
25
- rb_check_type(buf, T_STRING);
26
- int size = RSTRING_LEN(buf);
27
- char * jpeg = StringValuePtr(buf);
25
+ rb_check_type(buf, T_STRING);
26
+
27
+ if (buf[0] != 0xFF || buf[1] != 0xD8) {
28
+ rb_raise(rb_eRuntimeError, "Not a JPEG image!");
29
+ return Qnil;
30
+ }
28
31
 
29
- njInit();
30
- if (njDecode(jpeg, size)) {
31
- free((void*)jpeg);
32
- rb_raise(rb_eRuntimeError, "Error decoding input file (size %d)", size);
33
- return Qnil;
34
- }
32
+ int size = RSTRING_LEN(buf);
33
+ char * jpeg = StringValuePtr(buf);
34
+ njInit();
35
35
 
36
+ if (njDecode(jpeg, size)) {
36
37
  free((void*)jpeg);
38
+ rb_raise(rb_eRuntimeError, "Error decoding input file (size %d)", size);
39
+ return Qnil;
40
+ }
41
+
42
+ free((void*)jpeg);
43
+
44
+ unsigned char * pixels = njGetImage();
45
+ if (!pixels) {
46
+ rb_raise(rb_eRuntimeError, "Couldn't decode image.");
47
+ return Qnil;
48
+ }
37
49
 
38
- char * out;
50
+ char * out;
39
51
  size_t bufsize;
40
52
  FILE * fp = open_memstream(&out, &bufsize);
41
53
  // FILE * fp = fopen("output.gif", "wb");
42
54
 
43
- if (!fp) {
44
- rb_raise(rb_eRuntimeError, "Cannot initialize memstream");
45
- return Qnil;
46
- }
55
+ if (!fp) {
56
+ rb_raise(rb_eRuntimeError, "Cannot initialize memstream");
57
+ return Qnil;
58
+ }
47
59
 
48
- unsigned char * pixels = njGetImage();
49
- unsigned char * rgba = rgb_to_rgba(pixels, njGetWidth(), njGetHeight());
50
- int maxColors = 8;
60
+ unsigned char * rgba = rgb_to_rgba(pixels, njGetWidth(), njGetHeight());
61
+ int maxColors = 8;
51
62
 
52
- jo_gif_t gif = jo_gif_start(fp, njGetWidth(), njGetHeight(), 0, maxColors);
53
- jo_gif_frame(&gif, rgba, 0, 0);
54
- jo_gif_end(&gif);
63
+ jo_gif_t gif = jo_gif_start(fp, njGetWidth(), njGetHeight(), 0, maxColors);
64
+ jo_gif_frame(&gif, rgba, 0, 0);
65
+ jo_gif_end(&gif);
55
66
 
56
- VALUE rstr;
57
- rstr = rb_str_new(out, bufsize);
67
+ VALUE rstr;
68
+ rstr = rb_str_new(out, bufsize);
58
69
 
59
- free(rgba);
60
- free(out);
61
- njDone();
70
+ free(rgba);
71
+ free(out);
72
+ njDone();
62
73
 
63
- return rstr;
74
+ return rstr;
64
75
  }
65
76
 
66
77
  VALUE Lilimg = Qnil;
data/lilimg.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'lilimg'
5
- s.version = '0.0.2'
5
+ s.version = '0.0.3'
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ['Tomas Pollak']
8
8
  s.email = ['tomas@forkhq.com']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lilimg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Pollak