Module: DynamicImage::Model
- Extended by:
- ActiveSupport::Concern
- Includes:
- Dis::Model, Dimensions, Transformations, Validations
- Defined in:
- lib/dynamic_image/model.rb,
lib/dynamic_image/model/dimensions.rb,
lib/dynamic_image/model/validations.rb,
lib/dynamic_image/model/transformations.rb
Overview
DynamicImage Model
ActiveModel extension for the model holding image data. It assumes your database table has at least the following attributes:
create_table :images do |t|
t.string :content_hash
t.string :content_type
t.integer :content_length
t.string :filename
t.string :colorspace
t.integer :real_width, :real_height
t.integer :crop_width, :crop_height
t.integer :crop_start_x, :crop_start_y
t.integer :crop_gravity_x, :crop_gravity_y
t.
end
To use it, simply include it in your model:
class Image < ActiveRecord::Base
include DynamicImage::Model
end
Usage
To save an image, simply assign to the file
attribute.
image = Image.create(file: params.permit(:file))
This will automatically parse and validate the image when your record is saved.
To read back the image data, access the data
attribute. This
will lazily load the data from the store.
data = image.data
Cropping
Images can be pre-cropped by setting crop_width
,
crop_height
, crop_start_x
and
crop_start_y
. The crop dimensions cannot exceed the image
size.
image.update(
crop_start_x: 15, crop_start_y: 20,
crop_width: 300, crop_height: 200
)
image.size # => Vector2d(300, 200)
By default, images will be cropped from the center. You can control this by
setting crop_gravity_x
and crop_gravity_y
.
DynamicImage will make sure the pixel referred to by these coordinates are
present in the cropped image, and as close to the center as possible
without zooming in.
Defined Under Namespace
Modules: Dimensions, Transformations, Validations
Instance Method Summary collapse
-
#cmyk? ⇒ Boolean
Returns true if the image is in the CMYK colorspace.
-
#gray? ⇒ Boolean
Returns true if the image is in the grayscale colorspace.
-
#rgb? ⇒ Boolean
Returns true if the image is in the RGB colorspace.
-
#safe_content_type ⇒ Object
Finds a web safe content type.
-
#to_param ⇒ Object
Includes a timestamp fingerprint in the URL param, so that rendered images can be cached indefinitely.
Methods included from Transformations
Methods included from Dimensions
#crop_gravity, #crop_gravity?, #crop_size, #crop_size?, #crop_start, #crop_start?, #cropped?, #real_size, #real_size?, #size, #size?
Instance Method Details
#cmyk? ⇒ Boolean
Returns true if the image is in the CMYK colorspace
74 75 76 |
# File 'lib/dynamic_image/model.rb', line 74 def cmyk? colorspace == "cmyk" end |
#gray? ⇒ Boolean
Returns true if the image is in the grayscale colorspace
79 80 81 |
# File 'lib/dynamic_image/model.rb', line 79 def gray? colorspace == "gray" end |
#rgb? ⇒ Boolean
Returns true if the image is in the RGB colorspace
84 85 86 |
# File 'lib/dynamic_image/model.rb', line 84 def rgb? colorspace == "rgb" end |
#safe_content_type ⇒ Object
Finds a web safe content type. GIF, JPEG and PNG images are allowed, any other formats should be converted to JPEG.
90 91 92 93 94 95 96 |
# File 'lib/dynamic_image/model.rb', line 90 def safe_content_type if safe_content_types.include?(content_type) content_type else "image/jpeg" end end |
#to_param ⇒ Object
Includes a timestamp fingerprint in the URL param, so that rendered images can be cached indefinitely.
100 101 102 |
# File 'lib/dynamic_image/model.rb', line 100 def to_param [id, updated_at.utc.to_s()].join("-") end |