imforger 0.1.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/.autotest +0 -23
- data/Gemfile +15 -0
- data/Gemfile.lock +26 -0
- data/History.txt +15 -3
- data/Manifest.txt +5 -0
- data/README.txt +33 -3
- data/Rakefile +1 -0
- data/benchmark/benchmark.rb +45 -0
- data/ext/imforger/imforger.c +70 -16
- data/lib/imforger.rb +14 -3
- data/lib/imforger.so +0 -0
- data/test/fixtures/large.original.jpg +0 -0
- data/test/test_imforger.rb +51 -0
- metadata +73 -45
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/.autotest
CHANGED
@@ -1,23 +0,0 @@
|
|
1
|
-
# -*- ruby -*-
|
2
|
-
|
3
|
-
require 'autotest/restart'
|
4
|
-
|
5
|
-
# Autotest.add_hook :initialize do |at|
|
6
|
-
# at.extra_files << "../some/external/dependency.rb"
|
7
|
-
#
|
8
|
-
# at.libs << ":../some/external"
|
9
|
-
#
|
10
|
-
# at.add_exception 'vendor'
|
11
|
-
#
|
12
|
-
# at.add_mapping(/dependency.rb/) do |f, _|
|
13
|
-
# at.files_matching(/test_.*rb$/)
|
14
|
-
# end
|
15
|
-
#
|
16
|
-
# %w(TestA TestB).each do |klass|
|
17
|
-
# at.extra_class_map[klass] = "test/test_misc.rb"
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
|
21
|
-
# Autotest.add_hook :run_command do |at|
|
22
|
-
# system "rake build"
|
23
|
-
# end
|
data/Gemfile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
group :development do
|
9
|
+
gem "bundler"
|
10
|
+
gem "hoe"
|
11
|
+
gem "hoe-git"
|
12
|
+
gem "hoe-doofus"
|
13
|
+
gem "hoe-gemcutter"
|
14
|
+
gem "rake-compiler"
|
15
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
gemcutter (0.7.0)
|
5
|
+
hoe (2.9.1)
|
6
|
+
rake (>= 0.8.7)
|
7
|
+
hoe-doofus (1.0.0)
|
8
|
+
hoe-gemcutter (1.0.0)
|
9
|
+
gemcutter (>= 0.1.3)
|
10
|
+
hoe (>= 2.3.3)
|
11
|
+
hoe-git (1.3.0)
|
12
|
+
hoe (>= 2.2.0)
|
13
|
+
rake (0.8.7)
|
14
|
+
rake-compiler (0.7.6)
|
15
|
+
rake
|
16
|
+
|
17
|
+
PLATFORMS
|
18
|
+
ruby
|
19
|
+
|
20
|
+
DEPENDENCIES
|
21
|
+
bundler
|
22
|
+
hoe
|
23
|
+
hoe-doofus
|
24
|
+
hoe-gemcutter
|
25
|
+
hoe-git
|
26
|
+
rake-compiler
|
data/History.txt
CHANGED
@@ -1,6 +1,18 @@
|
|
1
|
-
===
|
1
|
+
=== 0.2.2 / 2011-03-31
|
2
2
|
|
3
|
-
*
|
3
|
+
* Supports explicit format declaration:
|
4
4
|
|
5
|
-
|
5
|
+
Imforger.new(input_file_path).to_file(output_file_path, :format => 'tif')
|
6
|
+
|
7
|
+
=== 0.2.1 / 2011-03-31
|
8
|
+
|
9
|
+
* Deghettofied the options to use symbols instead of string:
|
10
|
+
|
11
|
+
Imforger.new(input_file_path).to_file(output_file_path, :width => 100,
|
12
|
+
:height => 100)
|
13
|
+
|
14
|
+
=== 0.2.0 / 2011-03-31
|
15
|
+
|
16
|
+
* Library now supports :maxwidth, :maxheight
|
17
|
+
* Includes benchmark/benchmark.rb
|
6
18
|
|
data/Manifest.txt
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
.autotest
|
2
|
+
Gemfile
|
3
|
+
Gemfile.lock
|
2
4
|
History.txt
|
3
5
|
Manifest.txt
|
4
6
|
README.txt
|
5
7
|
Rakefile
|
8
|
+
benchmark/benchmark.rb
|
6
9
|
ext/imforger/extconf.rb
|
7
10
|
ext/imforger/imforger.c
|
8
11
|
lib/imforger.rb
|
12
|
+
lib/imforger.so
|
13
|
+
test/fixtures/large.original.jpg
|
9
14
|
test/helper.rb
|
10
15
|
test/test_imforger.rb
|
data/README.txt
CHANGED
@@ -2,11 +2,15 @@
|
|
2
2
|
|
3
3
|
== DESCRIPTION:
|
4
4
|
|
5
|
-
Imforger
|
5
|
+
Imforger
|
6
|
+
[short for Image Forger, because we are making copies of images]
|
7
|
+
|
8
|
+
This class relies on the Imlib2 library to quickly convert between different file types, scaling and compressing on the way.
|
6
9
|
|
7
10
|
== FEATURES/PROBLEMS:
|
8
11
|
|
9
|
-
As far as I know, this gem only works on Linux and Ruby 1.9+
|
12
|
+
As far as I know, this gem only works on Linux and Ruby 1.9+ Anyone
|
13
|
+
know how to install the dev files for Imlib2, please let me know.
|
10
14
|
|
11
15
|
Imlib2 drops the ICC profile and XMP tags when it creates the new image. I have been using exiftool to copy the ICC profile and XMP tags over. This is still much faster than ImageMagick et al.
|
12
16
|
|
@@ -15,6 +19,18 @@ Imlib2 drops the ICC profile and XMP tags when it creates the new image. I have
|
|
15
19
|
require 'imforger'
|
16
20
|
Imforger.new(input_file_path).to_file(output_file_path)
|
17
21
|
|
22
|
+
or:
|
23
|
+
|
24
|
+
Imforger.new(input_file_path).to_file(output_file_path, :width => 100,
|
25
|
+
:height => 100)
|
26
|
+
|
27
|
+
or:
|
28
|
+
|
29
|
+
Imforger.new(input_file_path).to_file(output_file_path, :maxwidth => 1000,
|
30
|
+
:maxheight => 1000, :format => 'tif')
|
31
|
+
|
32
|
+
See the test file for other examples.
|
33
|
+
|
18
34
|
== REQUIREMENTS:
|
19
35
|
|
20
36
|
Imlib2
|
@@ -25,7 +41,21 @@ gem install imforger
|
|
25
41
|
|
26
42
|
== SPEED:
|
27
43
|
|
28
|
-
ImageMagick was too slow and used too much memory. [I didn't even bother frobnicating with RMagick.] I also compared to the NetPBM library for good measure.
|
44
|
+
The purpose of this gem is to scale images and save them out quickly. ImageMagick was too slow and used too much memory. [I didn't even bother frobnicating with RMagick.] I include a benchmark that I used in the benchmark dir. Results belew. I also compared to the NetPBM library for good measure.
|
45
|
+
|
46
|
+
$ ruby benchmark/benchmark.rb
|
47
|
+
|
48
|
+
user system total real
|
49
|
+
ImageMagick 0.000000 0.010000 1.710000 ( 0.729113)
|
50
|
+
NetPBM 0.000000 0.000000 0.700000 ( 0.391043)
|
51
|
+
Imforger 0.310000 0.010000 0.320000 ( 0.321695)
|
52
|
+
|
53
|
+
Changing the input file size and format showed similar results: Imforger
|
54
|
+
is roughly twice as fast as calling out ImageMagick in realtime on a
|
55
|
+
dual-core laptop, and also
|
56
|
+
noticeably faster than NetPBM. I don't include memory usage numbers
|
57
|
+
here, but anecdotally I did notice significantly less RAM usage with Imforger vs
|
58
|
+
ImageMagick.
|
29
59
|
|
30
60
|
== LICENSE:
|
31
61
|
|
data/Rakefile
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'imforger'
|
2
|
+
require 'benchmark'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'open3'
|
5
|
+
|
6
|
+
Benchmark.bm(12) do |x|
|
7
|
+
#test these image scaling methods
|
8
|
+
benchmark = [
|
9
|
+
:imagemagick,
|
10
|
+
:netpbm,
|
11
|
+
:imlib
|
12
|
+
]
|
13
|
+
|
14
|
+
@original_file = File.expand_path(File.join(File.dirname(__FILE__), '..', 'test', 'fixtures', 'large.original.jpg'))
|
15
|
+
@input_file = File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', 'input.jpg'))
|
16
|
+
@output_file = lambda{|type| File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', "output.#{type}.jpg"))}
|
17
|
+
|
18
|
+
#prep the files
|
19
|
+
raise "Cannot find original file #{@original_file}." unless File.exist?(@original_file)
|
20
|
+
FileUtils.cp(@original_file, @input_file)
|
21
|
+
|
22
|
+
#silence stupid pnmtojpeg
|
23
|
+
$stderr.reopen(File.open('/dev/null','w+'))
|
24
|
+
|
25
|
+
x.report("ImageMagick") do
|
26
|
+
`convert #{@input_file} -resize 100x100\! #{@output_file.call('ImageMagick')}`
|
27
|
+
end if benchmark.include?(:imagemagick)
|
28
|
+
|
29
|
+
x.report("NetPBM") do
|
30
|
+
`/usr/bin/anytopnm #{@input_file} | /usr/bin/pamscale -width 100 -height 100 | /usr/bin/pnmtojpeg > #{@output_file.call('NetPBM')}`
|
31
|
+
end if benchmark.include?(:netpbm)
|
32
|
+
|
33
|
+
x.report("Imlib") do
|
34
|
+
fr = Imforger.new @input_file
|
35
|
+
fr.to_file "#{@output_file.call('Imlib')}", :width => 100, :height => 100
|
36
|
+
end if benchmark.include?(:imlib)
|
37
|
+
|
38
|
+
#cleanup files
|
39
|
+
if true && false
|
40
|
+
FileUtils.rm @input_file
|
41
|
+
[ 'ImageMagick', 'NetPBM', 'Imforger'].each do |type|
|
42
|
+
FileUtils.rm @output_file.call(type)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/ext/imforger/imforger.c
CHANGED
@@ -10,21 +10,35 @@
|
|
10
10
|
/* ruby */
|
11
11
|
#include <ruby.h>
|
12
12
|
|
13
|
-
static VALUE imforger_save_file(VALUE self, VALUE
|
13
|
+
static VALUE imforger_save_file(VALUE self, VALUE outputString)
|
14
14
|
{
|
15
|
-
VALUE
|
16
|
-
VALUE
|
15
|
+
VALUE r_input_image;
|
16
|
+
VALUE r_output_image;
|
17
|
+
VALUE r_options;
|
18
|
+
VALUE r_width;
|
19
|
+
VALUE r_height;
|
20
|
+
VALUE r_maxwidth;
|
21
|
+
VALUE r_maxheight;
|
22
|
+
VALUE r_format;
|
23
|
+
|
17
24
|
char *imagePath1;
|
18
25
|
char *imagePath2;
|
26
|
+
char *format;
|
27
|
+
|
28
|
+
int width;
|
29
|
+
int height;
|
30
|
+
float scale;
|
31
|
+
|
19
32
|
/* image handles */
|
20
33
|
Imlib_Image image1;
|
21
34
|
Imlib_Image image2;
|
22
35
|
|
23
|
-
|
24
|
-
|
36
|
+
r_input_image = rb_iv_get(self, "@input_image");
|
37
|
+
r_output_image = rb_iv_set(self, "@output_image", outputString);
|
38
|
+
r_options = rb_iv_get(self, "@options");
|
25
39
|
|
26
|
-
imagePath1 = StringValuePtr(
|
27
|
-
imagePath2 = StringValuePtr(
|
40
|
+
imagePath1 = StringValuePtr(r_input_image);
|
41
|
+
imagePath2 = StringValuePtr(r_output_image);
|
28
42
|
|
29
43
|
/* check that the file exists and can be read */
|
30
44
|
/* TODO: raise a real error */
|
@@ -40,17 +54,57 @@ static VALUE imforger_save_file(VALUE self, VALUE anObject)
|
|
40
54
|
char *tmp;
|
41
55
|
/* set the image1 we loaded as the current context image1 to work on */
|
42
56
|
imlib_context_set_image(image1);
|
43
|
-
|
57
|
+
|
58
|
+
/* if the width and height were set, use that; otherwise use the
|
59
|
+
* current dimensions */
|
60
|
+
r_width = rb_hash_aref(r_options, ID2SYM(rb_intern("width")));
|
61
|
+
r_height = rb_hash_aref(r_options, ID2SYM(rb_intern("height")));
|
62
|
+
if(r_width == Qnil){
|
63
|
+
width = imlib_image_get_width();
|
64
|
+
} else {
|
65
|
+
width = NUM2INT(r_width);
|
66
|
+
}
|
67
|
+
if(r_height == Qnil){
|
68
|
+
height = imlib_image_get_height();
|
69
|
+
} else {
|
70
|
+
height = NUM2INT(r_height);
|
71
|
+
}
|
72
|
+
|
73
|
+
/* going for maximum height */
|
74
|
+
r_maxwidth = rb_hash_aref(r_options, ID2SYM(rb_intern("maxwidth")));
|
75
|
+
r_maxheight = rb_hash_aref(r_options, ID2SYM(rb_intern("maxheight")));
|
76
|
+
if(r_maxwidth != Qnil){
|
77
|
+
if(width > NUM2INT(r_maxwidth)){
|
78
|
+
scale = NUM2INT(r_maxwidth) / (float)width;
|
79
|
+
width = NUM2INT(r_maxwidth);
|
80
|
+
height = (int)(scale * height);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
if(r_maxheight != Qnil){
|
84
|
+
if(height > NUM2INT(r_maxheight)){
|
85
|
+
scale = NUM2INT(r_maxheight) / (float)height;
|
86
|
+
height = NUM2INT(r_maxheight);
|
87
|
+
width = (int)(scale * width);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
/* set the image1 format
|
92
|
+
* to be the format of the extension of our last */
|
44
93
|
/* argument - i.e. .png = png, .tif = tiff etc. */
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
/* save the image1 */
|
52
|
-
imlib_save_image(imagePath2);
|
94
|
+
r_format = rb_hash_aref(r_options, ID2SYM(rb_intern("format")));
|
95
|
+
if(r_format != Qnil){
|
96
|
+
format = StringValuePtr(r_format);
|
97
|
+
} else {
|
98
|
+
tmp = strrchr(imagePath2, '.');
|
99
|
+
format = (tmp + 1);
|
53
100
|
}
|
101
|
+
imlib_context_set_anti_alias(1);
|
102
|
+
image2 = imlib_create_cropped_scaled_image(0,0,imlib_image_get_width(),imlib_image_get_height(),width,height);
|
103
|
+
imlib_context_set_image(image2);
|
104
|
+
imlib_image_set_format(format);
|
105
|
+
/* save the image1 */
|
106
|
+
imlib_save_image(imagePath2);
|
107
|
+
}
|
54
108
|
return Qtrue;
|
55
109
|
}
|
56
110
|
|
data/lib/imforger.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'imforger.so'
|
2
2
|
|
3
3
|
class Imforger
|
4
|
-
VERSION = '0.
|
4
|
+
VERSION = '0.2.2'
|
5
5
|
|
6
|
-
attr_accessor :input_image, :output_image
|
6
|
+
attr_accessor :input_image, :output_image, :options
|
7
7
|
|
8
8
|
class Exception < RuntimeError; end
|
9
9
|
|
@@ -12,9 +12,20 @@ class Imforger
|
|
12
12
|
|
13
13
|
raise(Imforger::Exception, "Input file not found!") unless File.exists?(path)
|
14
14
|
@input_image = path
|
15
|
+
@options = {}
|
15
16
|
end
|
16
17
|
|
17
|
-
def to_file(output_path)
|
18
|
+
def to_file(output_path, opts = {})
|
19
|
+
@options.merge!(opts)
|
20
|
+
check_format
|
21
|
+
|
18
22
|
save_file(File.expand_path(output_path))
|
19
23
|
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def check_format
|
27
|
+
if @options[:format]
|
28
|
+
raise(Imforger::Exception, "I don't know if that file format is supported!") unless %w(tif png jpg).include?(@options[:format])
|
29
|
+
end
|
30
|
+
end
|
20
31
|
end
|
data/lib/imforger.so
ADDED
Binary file
|
Binary file
|
data/test/test_imforger.rb
CHANGED
@@ -1,9 +1,60 @@
|
|
1
1
|
require 'helper'
|
2
|
+
require 'fileutils'
|
2
3
|
|
3
4
|
class TestImforger < MiniTest::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@original_file = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', 'large.original.jpg'))
|
7
|
+
@input_file = File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', 'input.jpg'))
|
8
|
+
@output_file = lambda{|type| File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', "output.#{type}.jpg"))}
|
9
|
+
|
10
|
+
#prep the files
|
11
|
+
raise "Cannot find original file #{@original_file}." unless File.exist?(@original_file)
|
12
|
+
FileUtils.cp(@original_file, @input_file)
|
13
|
+
end
|
14
|
+
|
4
15
|
def test_raise_an_error_if_no_path_to_file
|
5
16
|
assert_raises Imforger::Exception do
|
6
17
|
Imforger.new('./this_file_doesnt_exist')
|
7
18
|
end
|
8
19
|
end
|
20
|
+
|
21
|
+
def test_creates_new_image
|
22
|
+
path = @output_file.call('copy')
|
23
|
+
|
24
|
+
fr = Imforger.new @input_file
|
25
|
+
fr.to_file path
|
26
|
+
assert File.exists?(path)
|
27
|
+
assert File.size(path) > 1500000
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_creates_new_image_smaller_size
|
31
|
+
path = @output_file.call('smaller')
|
32
|
+
|
33
|
+
fr = Imforger.new @input_file
|
34
|
+
fr.to_file path, :width => 100, :height => 100
|
35
|
+
assert File.size(path) > 3000
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_creates_new_bounded_size
|
39
|
+
path = @output_file.call('bounded')
|
40
|
+
|
41
|
+
fr = Imforger.new @input_file
|
42
|
+
fr.to_file path, :maxwidth => 117, :maxheight => 120
|
43
|
+
assert File.size(path) > 3900
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_creates_new_image_different_format
|
47
|
+
%w(tif png jpg).each do |extension|
|
48
|
+
path = "#{@output_file.call('format')}.#{extension}"
|
49
|
+
fr = Imforger.new(@input_file).to_file(path, :format => extension)
|
50
|
+
assert((File.size(path) > 1500000), "Could not create file of type #{extension}.")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_raises_an_error_if_unknown_format
|
55
|
+
fr = Imforger.new @input_file
|
56
|
+
assert_raises Imforger::Exception do
|
57
|
+
fr.to_file '/dev/null', :format => 'pizza'
|
58
|
+
end
|
59
|
+
end
|
9
60
|
end
|
metadata
CHANGED
@@ -1,111 +1,139 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: imforger
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.2
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Casey Rosenthal
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
|
-
cert_chain:
|
12
|
-
-
|
13
|
-
|
11
|
+
cert_chain:
|
12
|
+
- ! '-----BEGIN CERTIFICATE-----
|
13
|
+
|
14
14
|
MIIDKjCCAhKgAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQwwCgYDVQQDDANjbHIx
|
15
|
+
|
15
16
|
FjAUBgoJkiaJk/IsZAEZFgZwb3J0NDkxEzARBgoJkiaJk/IsZAEZFgNjb20wHhcN
|
17
|
+
|
16
18
|
MTEwMzI1MjIyNTA2WhcNMTIwMzI0MjIyNTA2WjA7MQwwCgYDVQQDDANjbHIxFjAU
|
19
|
+
|
17
20
|
BgoJkiaJk/IsZAEZFgZwb3J0NDkxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0G
|
21
|
+
|
18
22
|
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDFO65jA8Vm6mrySAEh0p9zMJ/c8pif
|
23
|
+
|
19
24
|
AwrL8K/fQzBOD8WjaHbt3WlDut4tBtzBpspaObbszg0QhH8ixvdIteaNaqWt5ivB
|
25
|
+
|
20
26
|
85BPy2NV/yBBhKZ3JshlivgcKr6RRwP/NfwVVWXMBCmX6d1/9hicHES7gLP61RLY
|
27
|
+
|
21
28
|
a13gfyuVSm1FipnzIWrgj1ArEQvLc5Qzp08ekolU3xvTQaItDPCh2ImaCixhlFaV
|
29
|
+
|
22
30
|
SZxGk2HEv5sdK2HiZfdN4P8dVBhWEK+HXh4WuyqivGI0mHioQNrAU2VSka0NN/dZ
|
31
|
+
|
23
32
|
NysVmj3E+P3EQaSJ1Apey6WVgozw/Jd2tRrcPp4bvNTcMcstXxDDdajLAgMBAAGj
|
33
|
+
|
24
34
|
OTA3MAkGA1UdEwQCMAAwHQYDVR0OBBYEFJGwO8OOOSuETTTIgEHrFaPYZY50MAsG
|
35
|
+
|
25
36
|
A1UdDwQEAwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAFZq0kRxt5VII27uV/lReyzAz
|
37
|
+
|
26
38
|
q5MWDtOv8hgUcF6DqsR8vMwYUtbl8CpKerY7CCdq8SBgI73gTSg0FlKhu/TWJyVS
|
39
|
+
|
27
40
|
vbD8qTsLMSJ1eagrRzY0W/hbl07CdFAunPKYw9vIOsQXBDLPoJoPogpSkbTGaUnD
|
41
|
+
|
28
42
|
NqVRcPwXgmwCdlJYOOBXh6QxArisZ/dFNtVZY2zUJCfdxpUwlXEtNvh9z+502nWp
|
43
|
+
|
29
44
|
B5PckRdTFq05psR5w5RInK0QZstX464GDSUs+CL7JvwXJKtnDGLb4/+xY3j5a/f6
|
45
|
+
|
30
46
|
ZZgY9wEKsxYB1Clu7uMdVBMb1hI4Kr/k6wDqXfpoZW9ltiyjmmgWvWAfPEsgSg==
|
47
|
+
|
31
48
|
-----END CERTIFICATE-----
|
32
49
|
|
33
|
-
|
50
|
+
'
|
51
|
+
date: 2011-03-31 00:00:00.000000000 -07:00
|
34
52
|
default_executable:
|
35
|
-
dependencies:
|
36
|
-
- !ruby/object:Gem::Dependency
|
53
|
+
dependencies:
|
54
|
+
- !ruby/object:Gem::Dependency
|
37
55
|
name: rake-compiler
|
38
|
-
|
39
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
56
|
+
requirement: &16507700 !ruby/object:Gem::Requirement
|
40
57
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
44
61
|
version: 0.4.1
|
45
62
|
type: :development
|
46
|
-
version_requirements: *id001
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: hoe
|
49
63
|
prerelease: false
|
50
|
-
|
64
|
+
version_requirements: *16507700
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: hoe
|
67
|
+
requirement: &16475160 !ruby/object:Gem::Requirement
|
51
68
|
none: false
|
52
|
-
requirements:
|
53
|
-
- -
|
54
|
-
- !ruby/object:Gem::Version
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
55
72
|
version: 2.9.1
|
56
73
|
type: :development
|
57
|
-
|
58
|
-
|
59
|
-
|
74
|
+
prerelease: false
|
75
|
+
version_requirements: *16475160
|
76
|
+
description: ! 'Imforger
|
77
|
+
|
78
|
+
[short for Image Forger, because we are making copies of images]
|
79
|
+
|
80
|
+
|
81
|
+
This class relies on the Imlib2 library to quickly convert between different file
|
82
|
+
types, scaling and compressing on the way.'
|
83
|
+
email:
|
60
84
|
- clr@port49.com
|
61
85
|
executables: []
|
62
|
-
|
63
|
-
extensions:
|
86
|
+
extensions:
|
64
87
|
- ext/imforger/extconf.rb
|
65
|
-
extra_rdoc_files:
|
88
|
+
extra_rdoc_files:
|
66
89
|
- History.txt
|
67
90
|
- Manifest.txt
|
68
91
|
- README.txt
|
69
|
-
files:
|
92
|
+
files:
|
70
93
|
- .autotest
|
94
|
+
- Gemfile
|
95
|
+
- Gemfile.lock
|
71
96
|
- History.txt
|
72
97
|
- Manifest.txt
|
73
98
|
- README.txt
|
74
99
|
- Rakefile
|
100
|
+
- benchmark/benchmark.rb
|
75
101
|
- ext/imforger/extconf.rb
|
76
102
|
- ext/imforger/imforger.c
|
77
103
|
- lib/imforger.rb
|
104
|
+
- lib/imforger.so
|
105
|
+
- test/fixtures/large.original.jpg
|
78
106
|
- test/helper.rb
|
79
107
|
- test/test_imforger.rb
|
80
108
|
- .gemtest
|
81
109
|
has_rdoc: true
|
82
110
|
homepage:
|
83
111
|
licenses: []
|
84
|
-
|
85
112
|
post_install_message:
|
86
|
-
rdoc_options:
|
113
|
+
rdoc_options:
|
87
114
|
- --main
|
88
115
|
- README.txt
|
89
|
-
require_paths:
|
116
|
+
require_paths:
|
90
117
|
- lib
|
91
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
119
|
none: false
|
93
|
-
requirements:
|
94
|
-
- -
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version:
|
97
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
125
|
none: false
|
99
|
-
requirements:
|
100
|
-
- -
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version:
|
126
|
+
requirements:
|
127
|
+
- - ! '>='
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
103
130
|
requirements: []
|
104
|
-
|
105
131
|
rubyforge_project: imforger
|
106
132
|
rubygems_version: 1.6.2
|
107
133
|
signing_key:
|
108
134
|
specification_version: 3
|
109
|
-
summary: Imforger
|
110
|
-
|
135
|
+
summary: Imforger [short for Image Forger, because we are making copies of images] This
|
136
|
+
class relies on the Imlib2 library to quickly convert between different file types,
|
137
|
+
scaling and compressing on the way.
|
138
|
+
test_files:
|
111
139
|
- test/test_imforger.rb
|
metadata.gz.sig
CHANGED
Binary file
|