【发布时间】:2014-09-04 14:30:09
【问题描述】:
我无法让这个 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。
我使用自制软件的 --disable-openmp 安装了 Imagemagick。我可以从命令行运行 mogrify 和转换。
我可以使用 MiniMagick 调整图像大小并将其保存在 Rails 控制台中,而不会出现问题。
我已确保 CarrierWave 初始化程序具有 config.enable_processing = true。
我在控制台或 sidekiq 终端窗口中没有看到任何错误消息。
我是这方面的新手,所以我不知道还有什么可以尝试的。为什么我的图片没有调整到我要求的尺寸?
编辑:这 600 个宽度来自 IMGKit,这意味着我还没有真正让carrierwave 处理图像。
【问题讨论】:
-
您尝试使用一个版本。版本 :medium do process :resize_to_limit => [300, 300] end
-
我可以试试,处理是否只适用于版本?我以为我看到了他们可以修改原始版本的示例,因为我只需要获得较小的版本,没有别的。
-
它也应该适用于原件。 S3 是每次都创建新镜像还是替换当前镜像?
-
每次在具有帖子 ID 的文件夹中创建一个新图像。它只是错误的尺寸
-
@ChrisValentine 您可以在版本之外调用流程。但是它将用处理后的版本替换原始图像。
标签: ruby-on-rails imagemagick carrierwave minimagick