Я не могу заставить этот загрузчик CarrierWave обрабатывать изображение и изменять его размер так, как мне хотелось бы.
Изображение изначально создается с этим.
class Screenshot
include Sidekiq::Worker
def perform(link_id)
link = Link.find(link_id)
file = Tempfile.new(["template_#{link.id.to_s}", '.jpg'], 'tmp', :encoding => 'ascii-8bit')
file.write(IMGKit.new(link.given_url, #quality: 50, width: 300).to_img(:jpg))
:quality => 50,
:width => 300,
:height => 300,
"crop-w" => 300,
"crop-h" => 300,
"disable-smart-width" => true,
"zoom" => 0.35).to_img(:jpg))
file.flush
link.snapshot = file
link.save
file.unlink
end
end
Я не мог заставить это работать, поэтому я подумал, что просто изменю размер в загрузчике. Затем я изменил загрузчик, чтобы сделать это следующим образом:
class SnapshotUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
storage :fog
process :convert_it
def convert_it
manipulate! do |img|
img.resize '300x300'
img
end
end
def convert_it2
resize_to_limit [300,300]
end
def convert_it3
resize_to_fit [300,-1]
end
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def cache_dir
"#{Rails.root}/tmp/uploads"
end
end
И это тоже не работает. Я пробовал каждый из методов преобразования, а также только прямой
process :resize_to_limit [300,300]
Образ создан. Кажется, теперь всегда ширина 600 на любой высоте.
Изображение загружается в AWS S3.
У меня установлен Imagemagick с параметром --disable-openmp из доморощенного. Я могу запустить mogrify и конвертировать из командной строки.
Я могу без проблем изменить размер изображения и сохранить его в консоли rails с помощью MiniMagick.
Я убедился, что инициализатор CarrierWave имеет config.enable_processing = true.
Я не вижу никаких сообщений об ошибках в консоли или в окне терминала sidekiq.
Я новичок в этом, поэтому я в тупике, что еще попробовать. Почему размер моего изображения не изменяется до размеров, которые я просил?
РЕДАКТИРОВАТЬ: ширина 600 исходила из IMGKit, что означает, что у меня до сих пор никогда не было несущей, которая фактически обрабатывала изображение.