gd 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 312dd76081ed2c6d1bee0750ac6b199185803f7b
4
+ data.tar.gz: 661fdeee6812a870d45da8f8e32c9ba42fa69a22
5
+ SHA512:
6
+ metadata.gz: e9235167c055441bd22c54f33535ef0ebc68a6862cf108031f69df8a97c7bc07f73d40d4530a4c47b48cce98aa361ebba905a5034f4b604bc9937e4275cedc54
7
+ data.tar.gz: c98e00183b240c5be22a1172fe44cef57686f563a0f686639ed5a0589e55a1b1a2a93cec00db63bdcd55973f8641f0f55c5a62caef775a5eaef65b1d937477c5
@@ -0,0 +1,5 @@
1
+ 0.0.3 - Nov 27, 2014
2
+
3
+ * Use libgd.so on Linux systems
4
+ Usually the appropriate symlink is provided by the gd-devel package
5
+
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Matthias Grosser
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,4 @@
1
+ gd
2
+ ==
3
+
4
+ Ruby bindings for the GD2 image manipulation library, MIT licensed
@@ -0,0 +1,22 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rdoc/task'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Run all tests'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.test_files = FileList['test/cases/*_test.rb']
12
+ t.verbose = true
13
+ end
14
+
15
+ desc 'Generate documentation'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'GD'
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README.md')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
@@ -0,0 +1,16 @@
1
+ require 'fiddle'
2
+ require 'fiddle/import'
3
+ require 'rbconfig'
4
+ require 'pathname'
5
+
6
+ module GD
7
+ PNG = 'png'
8
+ JPEG = 'jpeg'
9
+ GIF = 'gif'
10
+ FORMATS = [PNG, JPEG, GIF]
11
+ end
12
+
13
+ require 'gd/version'
14
+ require 'gd/lib'
15
+ require 'gd/base'
16
+ require 'gd/image'
@@ -0,0 +1,10 @@
1
+ module GD
2
+ module Base
3
+
4
+ protected
5
+
6
+ def struct
7
+ @struct
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,69 @@
1
+ module GD
2
+ class Image
3
+ include Base
4
+
5
+ class << self
6
+ protected :new
7
+
8
+ def import(filename, options = {})
9
+ format = options.delete(:format)
10
+ format = format.to_s.downcase if format
11
+ raise ArgumentError, "Unsupported format '#{format}'" if format && !FORMATS.include?(format)
12
+ format ||= format_from_filename(filename) || format_from_magic(File.binread(filename, 4))
13
+ method = { PNG => :gdImageCreateFromPng, JPEG => :gdImageCreateFromJpeg, GIF => :gdImageCreateFromGif }[format]
14
+ if ptr = File.open(filename, 'rb') { |f| GD::LIB.public_send(method, f) } and not ptr.null?
15
+ ptr.free = GD::LIB['gdImageDestroy']
16
+ struct = LIB::ImageStruct.new(ptr)
17
+ if struct.trueColor.zero?
18
+ IndexedColorImage.new(struct)
19
+ else
20
+ TrueColorImage.new(struct)
21
+ end
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def format_from_filename(filename)
28
+ extension = File.extname(filename).downcase[1..-1]
29
+ extension = JPEG if 'jpg' == extension
30
+ extension if FORMATS.include?(extension)
31
+ end
32
+
33
+ def format_from_magic(data)
34
+ case data
35
+ when /\A\xFF\xD8/n then JPEG
36
+ when /\A\x89PNG/n then PNG
37
+ when /\AGIF8/n then GIF
38
+ end
39
+ end
40
+
41
+ end
42
+
43
+ def initialize(struct)
44
+ raise ArgumentError, 'No struct given' unless struct
45
+ @struct = struct
46
+ end
47
+
48
+ def true_color?
49
+ not struct.trueColor.zero?
50
+ end
51
+
52
+ def width
53
+ struct.sx
54
+ end
55
+
56
+ def height
57
+ struct.sy
58
+ end
59
+
60
+ end
61
+
62
+ class IndexedColorImage < Image
63
+ private_class_method :import
64
+ end
65
+
66
+ class TrueColorImage < Image
67
+ private_class_method :import
68
+ end
69
+ end
@@ -0,0 +1,65 @@
1
+ module GD
2
+
3
+ module LIB
4
+ extend Fiddle::Importer
5
+
6
+ dlload case RbConfig::CONFIG['arch']
7
+ when /darwin/ then 'libgd.dylib'
8
+ when /mswin32/, /cygwin/ then 'bgd.dll'
9
+ else
10
+ 'libgd.so'
11
+ end
12
+
13
+ extern 'void* gdImageCreateFromPng(void *)'
14
+ extern 'void* gdImageCreateFromGif(void *)'
15
+ extern 'void* gdImageCreateFromJpeg(void *)'
16
+ extern 'void* gdImageDestroy(void *)'
17
+
18
+ typedef_struct_gdImageStruct = [
19
+ 'unsigned char **pixels',
20
+ 'int sx',
21
+ 'int sy',
22
+ 'int colorsTotal',
23
+ 'int red[256]',
24
+ 'int green[256]',
25
+ 'int blue[256]',
26
+ 'int open[256]',
27
+ 'int transparent',
28
+ 'int* polyInts',
29
+ 'int polyAllocated',
30
+ 'void* brush',
31
+ 'void* tile',
32
+ 'int brushColorMap[256]',
33
+ 'int tileColorMap[256]',
34
+ 'int styleLength',
35
+ 'int stylePos',
36
+ 'int *style',
37
+ 'int interlace',
38
+ 'int thick',
39
+ 'int alpha[256]',
40
+ 'int trueColor',
41
+ 'int** tpixels',
42
+ 'int alphaBlendingFlag',
43
+ 'int saveAlphaFlag',
44
+ # There should NEVER BE ACCESSOR MACROS FOR ITEMS BELOW HERE, so this
45
+ # part of the structure can be safely changed in new releases.
46
+ 'int AA',
47
+ 'int AA_color',
48
+ 'int AA_dont_blend',
49
+ 'int cx1',
50
+ 'int cy1',
51
+ 'int cx2',
52
+ 'int cy2',
53
+ 'unsigned int res_x',
54
+ 'unsigned int res_y',
55
+ 'int paletteQuantizationMethod',
56
+ 'int paletteQuantizationSpeed',
57
+ 'int paletteQuantizationMinQuality',
58
+ 'int paletteQuantizationMaxQuality'
59
+ ]
60
+ # 'gdInterpolationMethod interpolation_id',
61
+ # 'interpolation_method interpolation'
62
+
63
+ ImageStruct = struct(typedef_struct_gdImageStruct)
64
+ end
65
+ end
@@ -0,0 +1,3 @@
1
+ module GD
2
+ VERSION = '0.0.3'
3
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Matthias Grosser
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '5.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '5.0'
83
+ description: MIT-licensed Ruby bindings for GD2
84
+ email:
85
+ - mtgrosser@gmx.net
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - CHANGELOG
91
+ - MIT-LICENSE
92
+ - README.md
93
+ - Rakefile
94
+ - lib/gd.rb
95
+ - lib/gd/base.rb
96
+ - lib/gd/image.rb
97
+ - lib/gd/lib.rb
98
+ - lib/gd/version.rb
99
+ homepage: http://github.com/mtgrosser/gd
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '2.0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.2.2
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Ruby bindings for the GD2 image manipulation library
123
+ test_files: []