How to crop image on upload with Rails, Carrierwave and Minimagick?
11,758
Solution 1
I have understood.
version :thumb do
process resize_to_fit: [300, nil]
process crop: '300x150+0+0'
#process resize_and_crop: 200
end
private
# Simplest way
def crop(geometry)
manipulate! do |img|
img.crop(geometry)
img
end
end
# Resize and crop square from Center
def resize_and_crop(size)
manipulate! do |image|
if image[:width] < image[:height]
remove = ((image[:height] - image[:width])/2).round
image.shave("0x#{remove}")
elsif image[:width] > image[:height]
remove = ((image[:width] - image[:height])/2).round
image.shave("#{remove}x0")
end
image.resize("#{size}x#{size}")
image
end
end
resize_and_crop from here:
http://blog.aclarke.eu/crop-and-resize-an-image-using-minimagick/
Solution 2
In #cropper your crop_h is not initialized(you double initialize crop_y instead). In #crop error is exactly what error message said - you don't have defined crop_x for Project class.
Related videos on Youtube
Author by
Leonid
Updated on September 16, 2022Comments
-
Leonid over 1 year
I have read:
- Undefined Method crop! Using Carrierwave with MiniMagick on rails 3.1.3
- Carrierwave Cropping
- http://pastebin.com/ue4mVbC8
And so I tried:
# encoding: utf-8 class ProjectPictureUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end version :thumb do process :cropper # process :crop process resize_to_fit: [200, 200] end def cropper manipulate! do |img| # if model.crop_x.present? image = MiniMagick::Image.open(current_path) crop_w = (image[:width] * 0.8).to_i crop_y = (image[:height] * 0.8).to_i crop_x = (image[:width] * 0.1).to_i crop_y = (image[:height] * 0.1).to_i # end img = img.crop "#{crop_x}x#{crop_y}+#{crop_w}+#{crop_h}" img end end def crop if model.crop_x.present? resize_to_limit(700, 700) manipulate! do |img| x = model.crop_x y = model.crop_y w = model.crop_w h = model.crop_h w << 'x' << h << '+' << x << '+' << y img.crop(w) img end end end end
Then I used cropper: undefined local variable or method `crop_h' for /uploads/tmp/20121006-2227-4220-9621/thumb_Koala.jpg:#
Then crop: undefined method `crop_x' for #
Model:
class Project < ActiveRecord::Base ... mount_uploader :picture, ProjectPictureUploader end
Rails 3.2, Win7,
convert -version Version: ImageMagick 6.7.9-4 2012-09-08 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC Features: OpenMP