tinyimg 0.1.2 → 0.1.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.
- checksums.yaml +4 -4
- data/README.md +13 -4
- data/ext/tinyimg/tinyimg.c +35 -0
- data/lib/tinyimg.rb +8 -0
- data/spec/tinyimg_spec.rb +14 -0
- data/tinyimg.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6c767cf7d39a737f942dc653bed088967678c01
|
4
|
+
data.tar.gz: 872f0520067cb5ff2d529f3d5595a5f48771e578
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebdfdef6986a4d77a18d62de00d391751d78c51530d86bf63f6f69c66574c45ad82d1b1df603add2375168f12ae02f4d954217083f4111593c4cea0bf1f922bf
|
7
|
+
data.tar.gz: 53babb3f77c2c543d48f5c6bb24cbf9a058ec598fc56075d5afdae04417e0ab49adcbba1980ba07a938cf4aae98c3aa239004a95970e0c8362fcb6ff050dd7f3
|
data/README.md
CHANGED
@@ -55,6 +55,14 @@ image.crop!(x: 20, y: 20, width: 50, height: 50)
|
|
55
55
|
image.crop!(width: image.height)
|
56
56
|
```
|
57
57
|
|
58
|
+
Set the transparent color of your PNG image if you're about to save it to a JPEG, as JPEG doesn't support
|
59
|
+
transparency:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
# Make the transparent color red
|
63
|
+
image.fill_transparent_color!(255, 0, 0)
|
64
|
+
```
|
65
|
+
|
58
66
|
Then get an image back:
|
59
67
|
|
60
68
|
```ruby
|
@@ -71,17 +79,18 @@ image.height # => 80
|
|
71
79
|
image.dimensions # => [120, 80]
|
72
80
|
```
|
73
81
|
|
74
|
-
You can also use the non-! versions of the operation methods: `resize_exact`, `resize`, `resize_to_fit`, `resize_to_fill
|
75
|
-
These create a new image in memory and return it, leaving the old image untouched. This is useful if you want
|
82
|
+
You can also use the non-! versions of the operation methods: `resize_exact`, `resize`, `resize_to_fit`, `resize_to_fill`, `crop`
|
83
|
+
and `fill_transparent_color`. These create a new image in memory and return it, leaving the old image untouched. This is useful if you want
|
76
84
|
to resize an original image to multiple sizes. Using these methods will take more memory.
|
77
85
|
|
78
86
|
## Examples
|
79
87
|
|
80
|
-
Take an uploaded file that's a PNG or JPEG, save the original as a JPEG, then resize to create a thumbnail and save that too:
|
88
|
+
Take an uploaded file that's a PNG or JPEG, make the transparent color white, save the original as a JPEG, then resize to create a thumbnail and save that too:
|
81
89
|
|
82
90
|
```ruby
|
83
91
|
Tinyimg
|
84
92
|
.from_io(params[:uploaded_file])
|
93
|
+
.fill_transparent_color!(255, 255, 255)
|
85
94
|
.save("#{path}/full_size.jpg")
|
86
95
|
.resize_to_fit!(100, 100)
|
87
96
|
.save("#{path}/thumbnail.jpg")
|
@@ -96,4 +105,4 @@ user.update!(thumbnail_image: data)
|
|
96
105
|
|
97
106
|
## Author and licence
|
98
107
|
|
99
|
-
Copyright 2015 Roger Nesbitt. Licenced under the MIT licence.
|
108
|
+
Copyright 2015-2016 Roger Nesbitt. Licenced under the MIT licence.
|
data/ext/tinyimg/tinyimg.c
CHANGED
@@ -240,6 +240,40 @@ VALUE resize_exact_bang(VALUE self, VALUE width_value, VALUE height_value)
|
|
240
240
|
return self;
|
241
241
|
}
|
242
242
|
|
243
|
+
VALUE fill_transparent_color_bang(VALUE self, VALUE red_value, VALUE green_value, VALUE blue_value)
|
244
|
+
{
|
245
|
+
gdImagePtr image_in, image_out;
|
246
|
+
int red, green, blue;
|
247
|
+
int color;
|
248
|
+
|
249
|
+
Check_Type(red_value, T_FIXNUM);
|
250
|
+
Check_Type(green_value, T_FIXNUM);
|
251
|
+
Check_Type(blue_value, T_FIXNUM);
|
252
|
+
|
253
|
+
red = FIX2INT(red_value);
|
254
|
+
green = FIX2INT(green_value);
|
255
|
+
blue = FIX2INT(blue_value);
|
256
|
+
|
257
|
+
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255) {
|
258
|
+
rb_raise(get_error_class(self), "red, green and blue must be integers between 0 and 255");
|
259
|
+
}
|
260
|
+
|
261
|
+
image_in = get_image_data(self);
|
262
|
+
image_out = gdImageCreateTrueColor(gdImageSX(image_in), gdImageSY(image_in));
|
263
|
+
|
264
|
+
color = gdImageColorAllocate(image_out, red, green, blue);
|
265
|
+
gdImageFilledRectangle(image_out, 0, 0, gdImageSX(image_in), gdImageSY(image_in), color);
|
266
|
+
|
267
|
+
gdImageCopy(
|
268
|
+
image_out, image_in, 0, 0, 0, 0,
|
269
|
+
gdImageSX(image_in), gdImageSY(image_in)
|
270
|
+
);
|
271
|
+
|
272
|
+
set_image_data(self, image_out);
|
273
|
+
|
274
|
+
return self;
|
275
|
+
}
|
276
|
+
|
243
277
|
VALUE internal_crop_bang(VALUE self, VALUE x_value, VALUE y_value, VALUE width_value, VALUE height_value)
|
244
278
|
{
|
245
279
|
gdImagePtr image_in, image_out;
|
@@ -292,6 +326,7 @@ void Init_tinyimg()
|
|
292
326
|
rb_define_class_under(cTinyimg, "Error", rb_const_get(rb_cObject, rb_intern("StandardError")));
|
293
327
|
|
294
328
|
rb_define_method(cTinyimg, "resize_exact!", resize_exact_bang, 2);
|
329
|
+
rb_define_method(cTinyimg, "fill_transparent_color!", fill_transparent_color_bang, 3);
|
295
330
|
rb_define_method(cTinyimg, "to_jpeg", to_jpeg, -1);
|
296
331
|
rb_define_method(cTinyimg, "to_png", to_png, -1);
|
297
332
|
rb_define_private_method(cTinyimg, "initialize_copy", initialize_copy, -1);
|
data/lib/tinyimg.rb
CHANGED
@@ -76,6 +76,14 @@ class Tinyimg
|
|
76
76
|
internal_crop!(x, y, width, height)
|
77
77
|
end
|
78
78
|
|
79
|
+
# Implemented in C
|
80
|
+
# def fill_transparent_color!(red, green, blue)
|
81
|
+
# end
|
82
|
+
|
83
|
+
def fill_transparent_color(red, green, blue)
|
84
|
+
dup.fill_transparent_color!(red, green, blue)
|
85
|
+
end
|
86
|
+
|
79
87
|
def save(filename)
|
80
88
|
if respond_to?(:save_to_file)
|
81
89
|
save_to_file(filename)
|
data/spec/tinyimg_spec.rb
CHANGED
@@ -159,6 +159,20 @@ RSpec.describe Tinyimg do
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
+
describe "#fill_transparent_color" do
|
163
|
+
it "returns an image of the same size without crashing (we can't test this easily)" do
|
164
|
+
result = sample.fill_transparent_color(255, 0, 0)
|
165
|
+
expect(result.dimensions).to eq [200, 153]
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "#fill_transparent_color!" do
|
170
|
+
it "returns an image of the same size without crashing (we can't test this easily)" do
|
171
|
+
sample.fill_transparent_color!(255, 0, 0)
|
172
|
+
expect(sample.dimensions).to eq [200, 153]
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
162
176
|
describe "#save" do
|
163
177
|
it "saves a JPEG" do
|
164
178
|
begin
|
data/tinyimg.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = 'tinyimg'
|
3
|
-
gem.version = '0.1.
|
3
|
+
gem.version = '0.1.3'
|
4
4
|
gem.summary = "Tiny and fast JPEG/PNG cropping and resizing"
|
5
5
|
gem.description = "Convert between JPEG/PNG, crop and resize images, either all in memory or via disk. Only requires libgd to function."
|
6
6
|
gem.has_rdoc = false
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tinyimg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roger Nesbitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
version: '0'
|
65
65
|
requirements: []
|
66
66
|
rubyforge_project:
|
67
|
-
rubygems_version: 2.
|
67
|
+
rubygems_version: 2.5.1
|
68
68
|
signing_key:
|
69
69
|
specification_version: 4
|
70
70
|
summary: Tiny and fast JPEG/PNG cropping and resizing
|