Module: DynamicImage::Model

Extended by:
ActiveSupport::Concern
Includes:
Dis::Model, Dimensions, Transformations, Validations, Variants
Defined in:
lib/dynamic_image/model.rb,
lib/dynamic_image/model/variants.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.timestamps
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, Variants

Instance Method Summary collapse

Methods included from Transformations

#resize, #rotate

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

Returns:

  • (Boolean)


76
77
78
# File 'lib/dynamic_image/model.rb', line 76

def cmyk?
  colorspace == "cmyk"
end

#gray?Boolean

Returns true if the image is in the grayscale colorspace

Returns:

  • (Boolean)


81
82
83
# File 'lib/dynamic_image/model.rb', line 81

def gray?
  colorspace == "gray"
end

#rgb?Boolean

Returns true if the image is in the RGB colorspace

Returns:

  • (Boolean)


86
87
88
# File 'lib/dynamic_image/model.rb', line 86

def rgb?
  colorspace == "rgb"
end

#safe_content_typeObject

Finds a web safe content type. GIF, JPEG and PNG images are allowed, any other formats should be converted to JPEG.



92
93
94
95
96
97
98
# File 'lib/dynamic_image/model.rb', line 92

def safe_content_type
  if safe_content_types.include?(content_type)
    content_type
  else
    "image/jpeg"
  end
end

#to_paramObject

Includes a timestamp fingerprint in the URL param, so that rendered images can be cached indefinitely.



102
103
104
# File 'lib/dynamic_image/model.rb', line 102

def to_param
  [id, updated_at.utc.to_formatted_s(cache_timestamp_format)].join("-")
end