dimension 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -10
- data/benchmark.rb +5 -5
- data/examples/middleware.rb +26 -0
- data/examples/sinatra.rb +2 -2
- data/lib/dimension/image.rb +2 -2
- data/lib/dimension/middleware.rb +35 -0
- data/lib/dimension/processors/imlib2.rb +2 -2
- data/lib/dimension/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6cf302e4bb1fc448c02a78c5c8301b16f3f3b3e8
|
4
|
+
data.tar.gz: c6f093638b2ac08b6cf18f23b37ca6c8bdceaf3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88bae316d7293757aa1699835e5d685c564315ca513ccafa9ffabb1384605b0f34807f06cfca5758ba7363eba75bc4c425205ecde4be738bcca6766652e5f25a
|
7
|
+
data.tar.gz: e511c93b2e6e4cc5dce4e8858498508eb6d8f82be4acd278f92996e0dad154e009d6520c5cbc42466c65b5323b3c75dbdc1805d253386f77f5c21eefcb25ed45
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Dimension
|
2
|
+
=========
|
3
3
|
|
4
4
|
Fast, simplified image resizing for Ruby. No ImageMagick.
|
5
5
|
|
6
6
|
``` rb
|
7
|
-
require '
|
7
|
+
require 'Dimension'
|
8
8
|
|
9
|
-
thumb =
|
9
|
+
thumb = Dimension.open('tux.png')
|
10
10
|
thumb.generate('100x100') # => { :width => 100, :height => 100 }
|
11
11
|
thumb.save('resized.png')
|
12
12
|
```
|
@@ -14,7 +14,7 @@ Fast, simplified image resizing for Ruby. No ImageMagick.
|
|
14
14
|
Or generate and write file automatically.
|
15
15
|
|
16
16
|
``` rb
|
17
|
-
thumb =
|
17
|
+
thumb = Dimension.new('tux.png')
|
18
18
|
thumb.generate!('100x300!') # will write file as 'tux-100x300.png'
|
19
19
|
```
|
20
20
|
|
@@ -23,7 +23,7 @@ Or generate and write file automatically.
|
|
23
23
|
Yes sir, we have it.
|
24
24
|
|
25
25
|
``` rb
|
26
|
-
thumb =
|
26
|
+
thumb = Dimension.open(params[:file])
|
27
27
|
thumb.generate('200x300#')
|
28
28
|
thumb.image_data
|
29
29
|
```
|
@@ -32,11 +32,10 @@ You can also pass a block, which will ensure the original image is closed after
|
|
32
32
|
|
33
33
|
``` rb
|
34
34
|
get '/resize/:file' do
|
35
|
-
thumb =
|
36
|
-
thumb.generate('200x300#') do
|
37
|
-
|
35
|
+
thumb = Dimension.open(params[:file])
|
36
|
+
thumb.generate('200x300#') do
|
37
|
+
thumb.to_response
|
38
38
|
end
|
39
|
-
@out.to_response
|
40
39
|
end
|
41
40
|
```
|
42
41
|
|
@@ -44,6 +43,11 @@ You can also pass a block, which will ensure the original image is closed after
|
|
44
43
|
|
45
44
|
This is taken directly from the excellent Dragonfly gem.
|
46
45
|
|
46
|
+
Author
|
47
|
+
======
|
48
|
+
|
49
|
+
Written by Tomás Pollak.
|
50
|
+
|
47
51
|
Copyright
|
48
52
|
=========
|
49
53
|
|
data/benchmark.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require './lib/
|
1
|
+
require './lib/dimension'
|
2
2
|
require 'benchmark'
|
3
3
|
|
4
4
|
file = ARGV[0] or abort('File needed')
|
@@ -10,8 +10,8 @@ puts "Processing #{file}"
|
|
10
10
|
Benchmark.bm do |x|
|
11
11
|
|
12
12
|
x.report do
|
13
|
-
|
14
|
-
a =
|
13
|
+
Dimension.processor = 'imlib2'
|
14
|
+
a = Dimension.open(file)
|
15
15
|
res = a.generate!(geometry)
|
16
16
|
puts res.inspect
|
17
17
|
end
|
@@ -19,8 +19,8 @@ Benchmark.bm do |x|
|
|
19
19
|
sleep 1
|
20
20
|
|
21
21
|
x.report do
|
22
|
-
|
23
|
-
b =
|
22
|
+
Dimension.processor = 'image_magick'
|
23
|
+
b = Dimension.open(file)
|
24
24
|
res = b.generate!(geometry)
|
25
25
|
puts res.inspect
|
26
26
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
ROOT = File.expand_path(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require 'thin'
|
4
|
+
require 'rack/builder'
|
5
|
+
require 'rack/static'
|
6
|
+
|
7
|
+
require ROOT + '/../lib/dimension'
|
8
|
+
require ROOT + '/../lib/dimension/middleware'
|
9
|
+
|
10
|
+
app = Rack::Builder.new do
|
11
|
+
|
12
|
+
root = File.join(ROOT, 'assets')
|
13
|
+
|
14
|
+
use Dimension::Middleware, { :root => root }
|
15
|
+
|
16
|
+
use Rack::Static,
|
17
|
+
:urls => ['/'],
|
18
|
+
:root => root
|
19
|
+
|
20
|
+
run lambda { |env|
|
21
|
+
[ 200, { 'Content-Type' => 'text/html'}, ['Not Found.'] ]
|
22
|
+
}
|
23
|
+
|
24
|
+
end.to_app
|
25
|
+
|
26
|
+
Thin::Server.start('0.0.0.0', 4567, app)
|
data/examples/sinatra.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
ROOT = File.expand_path(File.dirname(__FILE__))
|
2
2
|
|
3
3
|
require 'sinatra'
|
4
|
-
require ROOT + '/../lib/
|
4
|
+
require ROOT + '/../lib/dimension'
|
5
5
|
|
6
6
|
get '/' do
|
7
7
|
images = Dir.glob(File.join(ROOT, 'assets') + '/*')
|
@@ -21,7 +21,7 @@ get '/images/:file' do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
begin
|
24
|
-
thumb =
|
24
|
+
thumb = Dimension.open(file)
|
25
25
|
rescue => e
|
26
26
|
return e.message
|
27
27
|
end
|
data/lib/dimension/image.rb
CHANGED
@@ -18,7 +18,7 @@ class Image
|
|
18
18
|
|
19
19
|
# Geometry string patterns
|
20
20
|
RESIZE_GEOMETRY = /^(\d+)?x(\d+)?[><%^!]?$|^\d+@$/ # e.g. '300x200!'
|
21
|
-
CROPPED_RESIZE_GEOMETRY = /^(\d+)x(\d+)
|
21
|
+
CROPPED_RESIZE_GEOMETRY = /^(\d+)x(\d+)[:|#](\w{1,2})?$/ # e.g. '20x50:ne'
|
22
22
|
CROP_GEOMETRY = /^(\d+)x(\d+)([+-]\d+)?([+-]\d+)?(\w{1,2})?$/ # e.g. '30x30+10+10'
|
23
23
|
|
24
24
|
attr_reader :file
|
@@ -52,7 +52,7 @@ class Image
|
|
52
52
|
|
53
53
|
def resize_to(geometry)
|
54
54
|
case geometry
|
55
|
-
when RESIZE_GEOMETRY
|
55
|
+
when RESIZE_GEOMETRY
|
56
56
|
log "Resize -- #{$1}x#{$2}"
|
57
57
|
resize($1, $2)
|
58
58
|
when CROPPED_RESIZE_GEOMETRY
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Dimension
|
2
|
+
|
3
|
+
class Middleware
|
4
|
+
|
5
|
+
FORMATS = ['.jpg', '.png', '.gif', '.jpeg']
|
6
|
+
|
7
|
+
def initialize(app, opts = {})
|
8
|
+
@app = app
|
9
|
+
@root = File.expand_path(opts[:root] || Dir.pwd())
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
url = env['PATH_INFO']
|
14
|
+
query = env['QUERY_STRING']
|
15
|
+
geometry = query && query[/geometry=([^\&|$]+)/, 1]
|
16
|
+
|
17
|
+
if geometry and ext = File.extname(url) and ext != '' and FORMATS.include?(ext.downcase)
|
18
|
+
file = File.join(@root, url)
|
19
|
+
# puts 'Processing image: ' + file
|
20
|
+
|
21
|
+
image = Dimension.open(file)
|
22
|
+
image.generate(geometry) do
|
23
|
+
image.to_response
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
@app.call(env)
|
28
|
+
rescue ArgumentError => e # Dimension::Error
|
29
|
+
# puts "Error processing image: #{e.message}"
|
30
|
+
@app.call(env)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -86,7 +86,7 @@ module Imlib2Processor
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def crop(width, height, x, y, gravity)
|
89
|
-
rect = [x || 0, y || 0, width.to_i, height.to_i]
|
89
|
+
rect = [(x || 0).to_i, (y || 0).to_i, width.to_i, height.to_i]
|
90
90
|
image.crop!(rect)
|
91
91
|
end
|
92
92
|
|
@@ -119,7 +119,7 @@ module Imlib2Processor
|
|
119
119
|
end
|
120
120
|
|
121
121
|
def get_resize_geometry(w, h, to_longer = true)
|
122
|
-
if to_longer
|
122
|
+
if to_longer or h.nil?
|
123
123
|
if image.w < image.h
|
124
124
|
new_h = ((w.to_f / image.w) * image.h).round
|
125
125
|
return w.to_i, new_h
|
data/lib/dimension/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dimension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomás Pollak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Yes, there are other graphic libraries besides ImageMagick.
|
14
14
|
email:
|
@@ -28,9 +28,11 @@ files:
|
|
28
28
|
- examples/assets/chair.jpg
|
29
29
|
- examples/assets/the-two-towers.png
|
30
30
|
- examples/assets/window.jpg
|
31
|
+
- examples/middleware.rb
|
31
32
|
- examples/sinatra.rb
|
32
33
|
- lib/dimension.rb
|
33
34
|
- lib/dimension/image.rb
|
35
|
+
- lib/dimension/middleware.rb
|
34
36
|
- lib/dimension/processors/image_magick.rb
|
35
37
|
- lib/dimension/processors/imlib2.rb
|
36
38
|
- lib/dimension/version.rb
|
@@ -58,4 +60,3 @@ signing_key:
|
|
58
60
|
specification_version: 4
|
59
61
|
summary: Native, in-process image resizing in Ruby.
|
60
62
|
test_files: []
|
61
|
-
has_rdoc:
|