Search code examples
ruby-on-railsrubycarrierwavermagick

Getting first image in gif using carrierwave


Im using carrier wave to upload gifs which works just fine, the problem comes when i try to generate the thumb version and converting the gif into a jpeg with only the first image in the gif as the thumb, i get an error:

LocalJumpError in ImagesController#create

no block given (yield)

app/controllers/images_controller.rb:21:in `new'
app/controllers/images_controller.rb:21:in `create'

Request

Parameters:

{"utf8"=>"✓",
"authenticity_token"=>"lPEjP1WtPxFdizL2/FAWGHzOZPtecb5nKzKO8dg5ZdE=",
"image"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007ff5d4cdc720 @original_filename="some-file-name.gif",
@content_type="image/gif",
@headers="Content-Disposition: form-data; name=\"image[image]\"; filename=\"some-file-name.gif\"\r\nContent-Type: image/gif\r\n",
@tempfile=#<File:/var/folders/c8/1t7w8nln4b3bvs4_nv2cyn2m0000gt/T/RackMultipart20120326-5101-gcyvk0>>,
"remote_image_url"=>"",
"title"=>"The red panda",
"nsw"=>"0"},
"commit"=>"Roll GIF"}

Here's the code im using to generate the thumb:

version :thumb do
    process :resize_to_limit => [200, 200]
    process :convert => 'jpg'
end

Hope you guys can help and thanks in advance.


Solution

  • To remove animations from a gif image using carrierwave, you can define the following processor:

    def remove_animation
      manipulate! do |img, index|
        index == 0 ? img : nil
      end
    end
    

    So, the code for the thumb version will be:

    version :thumb do
      process :remove_animation
      process :resize_to_limit => [200, 200]
      process :convert => 'jpg'
    end