sdsykes-fastimage_resize 0.1.1

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.
data/README ADDED
@@ -0,0 +1,27 @@
1
+ FastImage Resize is an extremely light solution for resizing images in ruby by using libgd
2
+
3
+ === Examples
4
+
5
+ require 'fastimage_resize'
6
+
7
+ FastImage.resize("http://stephensykes.com/images/ss.com_x.gif", "my.gif", 100, 20)
8
+ => 1
9
+
10
+ === Requirements
11
+
12
+ RubyInline
13
+
14
+ sudo gem install RubyInline
15
+
16
+ FastImage
17
+
18
+ sudo gem install sdsykes-fastimage -s http://gems.github.com
19
+
20
+ Libgd
21
+
22
+ See http://www.libgd.org/
23
+ Libgd is commonly available on most unix platforms, including OSX.
24
+
25
+ === References
26
+
27
+ * http://blog.new-bamboo.co.uk/2007/12/3/super-f-simple-resizing
data/README.textile ADDED
@@ -0,0 +1,42 @@
1
+ h1. FastImage Resize
2
+
3
+ h4. FastImage Resize is an extremely light solution for resizing images in ruby by using libgd
4
+
5
+ h2. Examples
6
+
7
+ <pre>
8
+ <code>
9
+ require 'fastimage_resize'
10
+
11
+ FastImage.resize("http://stephensykes.com/images/ss.com_x.gif", "my.gif", 100, 20)
12
+ => 1
13
+ </pre>
14
+ </code>
15
+
16
+ h2. Requirements
17
+
18
+ * RubyInline
19
+
20
+ <pre>
21
+ <code>
22
+ sudo gem install RubyInline
23
+ </pre>
24
+ </code>
25
+
26
+ * FastImage
27
+
28
+ <pre>
29
+ <code>
30
+ sudo gem install sdsykes-fastimage -s http://gems.github.com
31
+ </pre>
32
+ </code>
33
+
34
+ * Libgd
35
+
36
+ See "http://www.libgd.org/":http://www.libgd.org/
37
+
38
+ Libgd is commonly available on most unix platforms, including OSX.
39
+
40
+ h2. References
41
+
42
+ * "http://blog.new-bamboo.co.uk/2007/12/3/super-f-simple-resizing":http://blog.new-bamboo.co.uk/2007/12/3/super-f-simple-resizing
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require 'rake'
2
+
3
+ begin
4
+ require 'jeweler'
5
+ Jeweler::Tasks.new do |s|
6
+ s.name = "fastimage_resize"
7
+ s.summary = "FastImage Resize - Image resizing fast and simple"
8
+ s.email = "sdsykes@gmail.com"
9
+ s.homepage = "http://github.com/sdsykes/fastimage_resize"
10
+ s.description = "FastImage Rssize is an extremely light solution for resizing images in ruby by using libgd."
11
+ s.authors = ["Stephen Sykes"]
12
+ s.files = FileList["[A-Z]*", "{lib,test}/**/*"]
13
+ end
14
+ rescue LoadError
15
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://
16
+ gems.github.com"
17
+ end
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 1
3
+ :major: 0
4
+ :minor: 1
@@ -0,0 +1,137 @@
1
+ # FastImage Resize is an extremely light solution for resizing images in ruby by using libgd
2
+ #
3
+ # === Examples
4
+ #
5
+ # require 'fastimage_resize'
6
+ #
7
+ # FastImage.resize("http://stephensykes.com/images/ss.com_x.gif", "my.gif", 100, 20)
8
+ # => 1
9
+ #
10
+ # === Requirements
11
+ #
12
+ # RubyInline
13
+ #
14
+ # sudo gem install RubyInline
15
+ #
16
+ # FastImage
17
+ #
18
+ # sudo gem install sdsykes-fastimage -s http://gems.github.com
19
+ #
20
+ # Libgd
21
+ #
22
+ # See http://www.libgd.org/
23
+ # Libgd is commonly available on most unix platforms, including OSX.
24
+ #
25
+ # === References
26
+ #
27
+ # * http://blog.new-bamboo.co.uk/2007/12/3/super-f-simple-resizing
28
+
29
+ require 'inline'
30
+ require 'open-uri'
31
+ require 'tempfile'
32
+ require 'fastimage'
33
+
34
+ class FastImage
35
+ SUPPORTED_FORMATS = [:jpg, :png, :gif]
36
+
37
+ class FormatNotSupported < FastImageException # :nodoc:
38
+ end
39
+
40
+ def self.resize(uri_in, file_out, w, h, options={})
41
+ jpeg_quality = options[:jpeg_quality] || -1
42
+
43
+ u = URI.parse(uri_in)
44
+ if u.scheme == "http" || u.scheme == "https" || u.scheme == "ftp"
45
+ f = Tempfile.new(name)
46
+ f.write(open(u).read)
47
+ f.close
48
+ resize_local(f.path, file_out, w, h, jpeg_quality)
49
+ File.unlink(f.path)
50
+ else
51
+ resize_local(uri_in, file_out, w, h, jpeg_quality)
52
+ end
53
+ rescue OpenURI::HTTPError, SocketError
54
+ raise ImageFetchFailure
55
+ end
56
+
57
+ def self.resize_local(file_in, file_out, w, h, jpeg_quality)
58
+ fi = new(file_in, :raise_on_failure=>true, :type_only=>true)
59
+ type_index = SUPPORTED_FORMATS.index(fi.type)
60
+ raise FormatNotSupported unless type_index
61
+ fi.resize_image(file_in, file_out, w, h, type_index, jpeg_quality)
62
+ end
63
+
64
+ def resize_image(filename_in, filename_out, w, h, image_type, jpeg_quality); end
65
+
66
+ inline do |builder|
67
+ builder.include '"gd.h"'
68
+ builder.add_link_flags "-lgd"
69
+
70
+ builder.c <<-"END"
71
+ void resize_image(char *filename_in, char *filename_out, int w, int h, int image_type, int jpeg_quality) {
72
+ gdImagePtr im_in, im_out;
73
+ FILE *in, *out;
74
+ int trans, trans_r, trans_g, trans_b;
75
+ int x, y, f = 0;
76
+
77
+ in = fopen(filename_in, "rb");
78
+ if (!in) return;
79
+
80
+ im_out = gdImageCreateTrueColor(w, h); /* must be truecolor */
81
+ switch(image_type) {
82
+ case 0: im_in = gdImageCreateFromJpeg(in);
83
+ break;
84
+ case 1: im_in = gdImageCreateFromPng(in);
85
+ gdImageAlphaBlending(im_out, 0); /* handle transparency correctly */
86
+ gdImageSaveAlpha(im_out, 1);
87
+ break;
88
+ case 2: im_in = gdImageCreateFromGif(in);
89
+ trans = gdImageGetTransparent(im_in);
90
+ /* find a transparent pixel, then turn off transparency
91
+ so that it copies correctly */
92
+ if (trans >= 0) {
93
+ for (x=0; x<gdImageSX(im_in); x++) {
94
+ for (y=0; y<gdImageSY(im_in); y++) {
95
+ if (gdImageGetPixel(im_in, x, y) == trans) {
96
+ f = 1;
97
+ break;
98
+ }
99
+ }
100
+ if (f) break;
101
+ }
102
+ gdImageColorTransparent(im_in, -1);
103
+ if (!f) trans = -1; /* no transparent pixel found */
104
+ }
105
+ break;
106
+ }
107
+
108
+ fclose(in);
109
+
110
+ /* Now copy the original */
111
+ gdImageCopyResampled(im_out, im_in, 0, 0, 0, 0,
112
+ gdImageSX(im_out), gdImageSY(im_out),
113
+ gdImageSX(im_in), gdImageSY(im_in));
114
+
115
+ out = fopen(filename_out, "wb");
116
+ if (out) {
117
+ switch(image_type) {
118
+ case 0: gdImageJpeg(im_out, out, jpeg_quality);
119
+ break;
120
+ case 1: gdImagePng(im_out, out);
121
+ break;
122
+ case 2: gdImageTrueColorToPalette(im_out, 0, 256);
123
+ if (trans >= 0) {
124
+ trans = gdImageGetPixel(im_out, x, y); /* get the color index of our transparent pixel */
125
+ gdImageColorTransparent(im_out, trans); /* may not always work as hoped */
126
+ }
127
+ gdImageGif(im_out, out);
128
+ break;
129
+ }
130
+ fclose(out);
131
+ }
132
+ gdImageDestroy(im_in);
133
+ gdImageDestroy(im_out);
134
+ }
135
+ END
136
+ end
137
+ end
data/test/test.rb ADDED
@@ -0,0 +1 @@
1
+ # todo
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sdsykes-fastimage_resize
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Stephen Sykes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-07-08 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: FastImage Rssize is an extremely light solution for resizing images in ruby by using libgd.
17
+ email: sdsykes@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - README.textile
25
+ files:
26
+ - Rakefile
27
+ - README
28
+ - README.textile
29
+ - VERSION.yml
30
+ - lib/fastimage_resize.rb
31
+ - test/test.rb
32
+ has_rdoc: true
33
+ homepage: http://github.com/sdsykes/fastimage_resize
34
+ post_install_message:
35
+ rdoc_options:
36
+ - --inline-source
37
+ - --charset=UTF-8
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ version:
52
+ requirements: []
53
+
54
+ rubyforge_project:
55
+ rubygems_version: 1.2.0
56
+ signing_key:
57
+ specification_version: 2
58
+ summary: FastImage Resize - Image resizing fast and simple
59
+ test_files: []
60
+