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
branch: master

This branch is even with mdchaney: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.