# encoding: utf-8 require 'carrierwave/processing/mini_magick' class PosterUploader < CarrierWave::Uploader::Base include CarrierWave::ImageOptimizer include CarrierWave::MiniMagick storage :file process :optimize @@sizes = { :thumb => [120, 120], :icon => [48, 48], :preview => [512, 512], :full => [1024, 1024] } def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end version :thumb do process :resize_to_fill => @@sizes[:thumb] end version :icon do process :resize_to_fill => @@sizes[:icon] end version :preview do process :resize_to_fit => @@sizes[:preview] end version :full do process :resize_to_fit => @@sizes[:full] end def image @image ||= MiniMagick::Image.open(file.path) end def is_landscape? image['width'] > image['height'] end def manipulate! cache_stored_file! if !cached? image = ::MiniMagick::Image.open(current_path) begin image.format(@format.to_s.downcase) if @format image = yield(image) image.write(current_path) begin image.run_command("identify", current_path) rescue image.run_command("identify", '"' + current_path + '"') end ensure image.destroy! end rescue ::MiniMagick::Error, ::MiniMagick::Invalid => e default = I18n.translate(:"errors.messages.mini_magick_processing_error", :e => e, :locale => :en) message = I18n.translate(:"errors.messages.mini_magick_processing_error", :e => e, :default => default) raise CarrierWave::ProcessingError, message end end