我无法通过此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并从命令行转换。
我可以调整图像大小并使用MiniMagick将其保存在rails控制台中而不会出现问题。
我确保CarrierWave初始化程序的config.enable_processing = true。
我在控制台或sidekiq终端窗口中看不到任何错误消息。
我是新手,所以我很难接受其他尝试。为什么我的图片没有调整到我要求的尺寸?
编辑:600宽度来自IMGKit,这意味着我仍然没有载波实际处理图像。
答案 0 :(得分:0)
嗯,每次我更改代码时,Sidekiq都没有重新启动。
我不知道你需要这样做,但据我所知,上传者不使用sidekiq进行上传,所以我不清楚为什么这是副作用。
无论如何,每次我进行代码更改时停止sidekiq都会导致这种情况发生。
我还发现了宝石Foreman帮助开始/停止所有服务。
如果有人能向我解释为什么Sidekiq干扰了这个让我知道。 Sidekiq负责制作图像,并正在创建图像。上传过程中没有发生调整大小。