dynamic_image 2.0.0.beta5 → 2.0.0.beta6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +57 -5
- data/lib/dynamic_image/controller.rb +2 -3
- data/lib/dynamic_image/helper.rb +15 -6
- data/lib/dynamic_image/processed_image.rb +2 -2
- data/lib/dynamic_image/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 051d5b39accd268d9cc110266aedd9fdb8f1cdd1
|
4
|
+
data.tar.gz: b1269f69f608a7bc858b508bbfebdb307af95bed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02c062771c93bbfde82f595c4410450c3934502de7fa042a51692bd55614fd3b51c3a31ed0eece6aeb22efa94df4d49f3fa0a645164d2b73e6101403ef0561d8
|
7
|
+
data.tar.gz: bab5fd5bd153d5a6181d8e8fccba6a8f484c390e04567d9b24a8052b13f4bcf9f52850eff7b5c0e9ac052e47b84c2266724874319f2a2eaf20d7839bfaebba88
|
data/README.md
CHANGED
@@ -1,6 +1,33 @@
|
|
1
1
|
# DynamicImage [![Build Status](https://travis-ci.org/elektronaut/dynamic_image.png)](https://travis-ci.org/elektronaut/dynamic_image) [![Code Climate](https://codeclimate.com/github/elektronaut/dynamic_image.png)](https://codeclimate.com/github/elektronaut/dynamic_image) [![Code Climate](https://codeclimate.com/github/elektronaut/dynamic_image/coverage.png)](https://codeclimate.com/github/elektronaut/dynamic_image)
|
2
2
|
|
3
|
-
|
3
|
+
Need to handle image uploads in your Rails app?
|
4
|
+
Give DynamicImage a try.
|
5
|
+
|
6
|
+
Rather than creating a pre-defined set of images when a file is
|
7
|
+
uploaded, DynamicImage stores the original file and generates images
|
8
|
+
on demand. It handles cropping, resizing, format and colorspace
|
9
|
+
conversion.
|
10
|
+
|
11
|
+
Supported formats at the moment are JPEG, PNG, GIF and TIFF. The
|
12
|
+
latter will automatically be converted to JPG. CMYK images will be
|
13
|
+
converted to RGB, and RGB images will be converted to the sRGB
|
14
|
+
colorspace for consistent appearance in all browsers.
|
15
|
+
|
16
|
+
DynamicImage is built on [Dis](https://github.com/elektronaut/dis)
|
17
|
+
and [MiniMagick](https://github.com/minimagick/minimagick).
|
18
|
+
|
19
|
+
All URLs are signed with a HMAC to protect against denial of service
|
20
|
+
and enumeration attacks.
|
21
|
+
|
22
|
+
## Requirements
|
23
|
+
|
24
|
+
* Rails 4.2
|
25
|
+
* Ruby 1.9.3+
|
26
|
+
* ImageMagick command line tools
|
27
|
+
|
28
|
+
## Documentation
|
29
|
+
|
30
|
+
[Documentation is available on RubyDoc.info](http://rdoc.info/gems/dynamic_image)
|
4
31
|
|
5
32
|
## Installation
|
6
33
|
|
@@ -40,6 +67,15 @@ declaration.
|
|
40
67
|
image_resources :images, path: "dynamic_images/:digest(/:size)"
|
41
68
|
```
|
42
69
|
|
70
|
+
## Storing an image
|
71
|
+
|
72
|
+
To save an image, simply assign the file attribute to your uploaded file.
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
image_params = params.require(:image).permit(:file)
|
76
|
+
Image.create(image_params)
|
77
|
+
```
|
78
|
+
|
43
79
|
## Rendering images in your views
|
44
80
|
|
45
81
|
You should use the provided helpers for displaying images, this will ensure
|
@@ -49,26 +85,26 @@ To display the image at it's original size, use `dynamic_image_tag` without
|
|
49
85
|
any options.
|
50
86
|
|
51
87
|
```erb
|
52
|
-
<%= dynamic_image_tag
|
88
|
+
<%= dynamic_image_tag(image) %>
|
53
89
|
```
|
54
90
|
|
55
91
|
To resize it, specify a max size. This will scale the image down to fit, but
|
56
92
|
no cropping will occur.
|
57
93
|
|
58
94
|
```erb
|
59
|
-
<%= dynamic_image_tag
|
95
|
+
<%= dynamic_image_tag(image, size: '400x400') %>
|
60
96
|
```
|
61
97
|
|
62
98
|
Setting `crop: true` will crop the image to the exact size.
|
63
99
|
|
64
100
|
```erb
|
65
|
-
<%= dynamic_image_tag
|
101
|
+
<%= dynamic_image_tag(image, size: '400x400', crop: true) %>
|
66
102
|
```
|
67
103
|
|
68
104
|
Omitting either dimension will render the image at an exact width or height.
|
69
105
|
|
70
106
|
```erb
|
71
|
-
<%= dynamic_image_tag
|
107
|
+
<%= dynamic_image_tag(image, size: '400x') %>
|
72
108
|
```
|
73
109
|
|
74
110
|
`dynamic_image_path` and `dynamic_image_url` act pretty much like regular URL
|
@@ -78,6 +114,22 @@ helpers.
|
|
78
114
|
<%= link_to "See image", dynamic_image_path(image) %>
|
79
115
|
```
|
80
116
|
|
117
|
+
## Caching
|
118
|
+
|
119
|
+
Generating images on the fly is expensive. This is less of a problem
|
120
|
+
in development mode, as DynamicImage respects the If-Modified-Since
|
121
|
+
header. In production, you should absolutely cache the results.
|
122
|
+
|
123
|
+
DynamicImage doesn't do any caching on it's own, but it is designed to
|
124
|
+
play well with others. Here's a few options:
|
125
|
+
|
126
|
+
* [CloudFlare](https://www.cloudflare.com)
|
127
|
+
* [Rack::Cache](http://rtomayko.github.io/rack-cache/)
|
128
|
+
* [actionpack-page_caching](https://github.com/rails/actionpack-page_caching)
|
129
|
+
|
130
|
+
It's perfectly safe to cache images indefinitely. The URL is
|
131
|
+
timestamped, and will change if the object changes.
|
132
|
+
|
81
133
|
## License
|
82
134
|
|
83
135
|
Copyright 2006-2014 Inge Jørgensen
|
@@ -14,7 +14,6 @@ module DynamicImage
|
|
14
14
|
before_action :verify_signed_params
|
15
15
|
before_action :find_record
|
16
16
|
after_action :cache_expiration_header
|
17
|
-
respond_to :html, :gif, :jpeg, :png, :tiff
|
18
17
|
helper_method :requested_size
|
19
18
|
end
|
20
19
|
|
@@ -31,7 +30,7 @@ module DynamicImage
|
|
31
30
|
# Renders the original image data, without any processing.
|
32
31
|
def original
|
33
32
|
if stale?(@record)
|
34
|
-
|
33
|
+
respond_to do |format|
|
35
34
|
format.any(:gif, :jpeg, :png, :tiff) do
|
36
35
|
send_data(
|
37
36
|
@record.data,
|
@@ -61,7 +60,7 @@ module DynamicImage
|
|
61
60
|
def render_image(options)
|
62
61
|
processed_image = DynamicImage::ProcessedImage.new(@record, options)
|
63
62
|
if stale?(@record)
|
64
|
-
|
63
|
+
respond_to do |format|
|
65
64
|
format.html do
|
66
65
|
render(file: File.join(File.dirname(__FILE__), 'templates/show'),
|
67
66
|
layout: false, locals: {options: options})
|
data/lib/dynamic_image/helper.rb
CHANGED
@@ -30,7 +30,7 @@ module DynamicImage
|
|
30
30
|
# dynamic_image_tag(image, size: "100x100", alt="Avatar")
|
31
31
|
# # => <img alt="Avatar" height="62" src="..." width="100" />
|
32
32
|
def dynamic_image_tag(record_or_array, options={})
|
33
|
-
record =
|
33
|
+
record = extract_dynamic_image_record(record_or_array)
|
34
34
|
options = {
|
35
35
|
alt: image_alt(record.filename)
|
36
36
|
}.merge(options)
|
@@ -130,7 +130,7 @@ module DynamicImage
|
|
130
130
|
end
|
131
131
|
|
132
132
|
def dynamic_image_url_with_size(record_or_array, size=nil, options={})
|
133
|
-
record =
|
133
|
+
record = extract_dynamic_image_record(record_or_array)
|
134
134
|
options = {
|
135
135
|
routing_type: :url,
|
136
136
|
action: nil,
|
@@ -141,8 +141,17 @@ module DynamicImage
|
|
141
141
|
polymorphic_url(record_or_array, options)
|
142
142
|
end
|
143
143
|
|
144
|
+
def extract_dynamic_image_record(record_or_array)
|
145
|
+
case record_or_array
|
146
|
+
when Array
|
147
|
+
record_or_array.last
|
148
|
+
else
|
149
|
+
record_or_array
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
144
153
|
def fit_size!(record_or_array, options)
|
145
|
-
record =
|
154
|
+
record = extract_dynamic_image_record(record_or_array)
|
146
155
|
action = options[:action].try(:to_s)
|
147
156
|
size_opts = options.extract!(:size, :crop, :upscale)
|
148
157
|
|
@@ -151,10 +160,10 @@ module DynamicImage
|
|
151
160
|
record,
|
152
161
|
uncropped: (action == "uncropped")
|
153
162
|
).fit(size_opts[:size], size_opts).floor.to_s
|
154
|
-
elsif action
|
155
|
-
record.
|
163
|
+
elsif action == "original"
|
164
|
+
record.real_size.floor.to_s
|
156
165
|
else
|
157
|
-
|
166
|
+
record.size.floor.to_s
|
158
167
|
end
|
159
168
|
end
|
160
169
|
end
|
@@ -10,7 +10,7 @@ module DynamicImage
|
|
10
10
|
@record = record
|
11
11
|
@uncropped = options[:uncropped] ? true : false
|
12
12
|
@format = options[:format].to_s.upcase if options[:format]
|
13
|
-
@format = "JPEG" if @format == "JPG"
|
13
|
+
@format = "JPEG" if defined?(@format) && @format == "JPG"
|
14
14
|
end
|
15
15
|
|
16
16
|
# Returns the content type of the processed image.
|
@@ -79,7 +79,7 @@ module DynamicImage
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def format
|
82
|
-
@format
|
82
|
+
@format ||= record_format
|
83
83
|
end
|
84
84
|
|
85
85
|
def gif?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamic_image
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.beta6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Inge Jørgensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.
|
19
|
+
version: 4.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.
|
26
|
+
version: 4.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: vector2d
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,14 +64,14 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: 0.
|
67
|
+
version: 1.0.0
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: 0.
|
74
|
+
version: 1.0.0
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: sqlite3
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|