Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Plugin for CarrierWave to automatically store image sizes and content types
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
README
image_size.rb

README

Requirements:
imagemagick - in particular the "identify" command

Include CarrierWave::ImageSize in your CarrierWave uploader
to have image sizes and content type automatically stored
along with the image.  For this to work, you must create a
second column in your database named:

  "#{image_name}_information"

For instance, if your image is named "pic", you need to create
a string or text column named "pic_information".

  t.string :pic, :limit => 250
  t.string :pic_information, :limit => 250

In your model, you mount the uploader

  mount_uploader :pic, PicUploader

And in the uploader, you include CarrierWave::ImageSize:

  class LogoUploader < CarrierWave::Uploader::Base

    ...
    include CarrierWave::ImageSize

Note that you might also need to "require" it at the top
of the file:

  require 'carrier_wave/image_size'

You now have three new methods on your uploaded pictures:

  image_width, image_height - returns height and width of images
      as integers

  content_type - returns the original content type of the image

Note that nested versions are fully supported and you can use
these methods with any of your versions:

  version :thumb do
    process :resize_to_fit => [50, 50]
    version :tiny do
      process :resize_to_fit => [10, 10]
    end
  end

In your code:

  artist.pic.thumb.tiny.image_width

Additionally, your form should propogate the _information field
along with the cache, otherwise the content type will be lost.

  <%= f.file_field :pic %>
  <%= f.hidden_field :pic_cache %>
  <%= f.hidden_field :pic_information unless f.object.pic_cache.blank? %>

The only limitation is that you cannot create a version of your
picture called "base", as I use that for storing the size of the
base image.  If you really badly need to use "base", search for "base"
below and change it to something else.

Internally, the _information field is simply a string:

  "image/png\nbase:200x150\nthumb:20x15\nthumb_tiny:10x7\n"

Where the sizes are simply width x height.  The content_type
is saved across "recreate_versions!".

Improvements (TODO):

  1. This should be turned into a gem
  2. Could probably better use the image processor (i.e. minimagick)
     to get size information
  3. Needs some tests
Something went wrong with that request. Please try again.