我有一个avatar_uploader.rb,它使用carrierwave创建上传头像的多个版本,并且还有一个裁剪方法。
version :thumb do
process :crop
resize_to_fill(100, 100)
end
version :miniature do
resize_to_fill(25, 25)
end
version :large do
resize_to_limit(600, 600)
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
img.crop!(x, y, w, h)
end
end
end
问题是我在应用裁剪方法后需要两个版本。我想要一个缩小版的缩略版,它是原始文件的裁剪版本。
裁剪方法要求用户裁剪图像,需要通过视图调用以获取x,y,w,h属性。所以它应该只做一次。用户在两个版本中裁剪两次图像是没有意义的。
现在,如果我可以定义版本缩小以在thumb版本上应用resize_to_fill会很方便,但我不知道它的语法是什么。
我想写这个: -
version :miniature do
thumb.resize_to_fill(25, 25)
end
但这只是一个错误,并说拇指未定义。
有没有办法实现这个目标?
更新: -
我认为我没有清楚地解释这个问题。
缩小版本会重新生成,但问题是裁剪不会改变原始文件。它只是创建了拇指版本。应用微型版本时,它会使原始文件小型化,而不是拇指版本。我想要与拇指版相同的裁剪,但在微型尺寸。理想情况下,我想在拇指版上应用微型版本。我不知道如何实现这一目标。希望现在更清楚了。
答案 0 :(得分:1)
您需要在裁剪后在图片上调用recreate_versions!
才能执行此操作。所以你可以这样做:
model.image.recreate_versions!(:miniature)
更新:
你似乎在:thumb
上有一个裁剪,但是对于你想要的东西,我会建议原始的自定义裁剪,然后重新创建版本。 This Railscast from Ryan Bates解释得很清楚。
希望这有帮助!