Rails 4, Carrierwave, Jcrop, загрузка изображений и изменение размера
ОБНОВЛЕНИЕ Я переместил код обрезки из загрузчика непосредственно в модель ноутбука, чтобы он вызывался как минимум. Теперь изображение обрабатывается. Фактически он обрезается до правильных размеров по ширине и высоте, но смещения по осям X и Y неверны. Я использую MiniMagick, а не RMagick. Вот мой метод crop_image:
def crop_image
if crop_x.present?
image.manipulate! do |img|
x = crop_x.to_i
y = crop_y.to_i
w = crop_w.to_i
h = crop_h.to_i
z = "#{w}x#{h}+#{x}+#{y}"
img.resize "600x600"
img.crop(z)
img
end
end
image.resize_to_fill(224, 150)
end
Что-то изменилось в Rails 4 по отношению к carrierwave или imagemagick? Я скопировал код, который работал (в приложении на Rails 3), чтобы загрузить изображение, обрезать его и сохранить обе версии, но я не могу заставить его работать в приложении Rails 4.
Вот соответствующие части:
class Notebook < ActiveRecord::Base
validates :title, :access, presence: true
mount_uploader :image, ImageUploader
belongs_to :user
has_many :invites
attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
after_update :crop_image
def notebook_title
title
end
def user_name
user.name
end
def crop_image
image.recreate_versions! if crop_x.present?
end
end
И воссоздать_версии! вызов обращается к image_uploader
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
include Sprockets::Rails::Helper
storage :file
include CarrierWave::MimeTypes
process :set_content_type
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
# Create different versions of your uploaded files:
version :large do
process resize_to_limit: [600, 600]
end
version :thumb do
process :crop
resize_to_fill(224, 150)
end
def err
raise "error here"
end
def crop
if model.crop_x.present?
resize_to_limit(600, 600)
manipulate! do |img|
x = model.crop_x.to_i
y = model.crop_y.to_i
w = model.crop_w.to_i
h = model.crop_h.to_i
size = w << 'x' << h
offset = '+' << x << '+' << y
img.crop("#{size}#{offset}")
img
end
end
end
end
Я вижу значения для crop_x, crop_y, crop_w и crop_h. Версия: блок большого пальца не вызывает какие-либо методы процесса. Даже если я попытаюсь вызвать ошибку изнутри версии: блок большого пальца, это не сработает.
Если кто-нибудь может предоставить какую-либо информацию, это было бы здорово.