在Carrierwave中重新处理不同版本的图像
使用 Carrierwave,我使用以下几行创建了 3 个版本的头像 - 一个原始版本、一个小拇指和一个大拇指:
process :resize_to_limit => [400, 400]
version :big_thumb do
process :resize_to_limit => [80, 80]
end
version :small_thumb do
process :resize_to_limit => [50, 50]
end
我在 AvatarUploader 类中添加了一个附加方法:
def reprocess(x,y,w,h)
manipulate! do |img|
img.crop(x.to_i, y.to_i, w.to_i, h.to_i, true)
end
resize_to_limit(180,180)
end
在执行更新后在我的模型中调用该方法:
attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
after_update :reprocess_image, :if => :cropping?
def cropping?
!crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
end
private
def reprocess_image
image.reprocess(crop_x,crop_y,crop_w,crop_h)
end
我已设法裁剪并调整原始版本的大小,但我似乎无法随之更新 2 个缩略图。我尝试了几种不同的技术但没有成功。
有什么建议吗?
Using Carrierwave, I created 3 versions of an avatar - an original, a small_thumb and a large_thumb using the following lines:
process :resize_to_limit => [400, 400]
version :big_thumb do
process :resize_to_limit => [80, 80]
end
version :small_thumb do
process :resize_to_limit => [50, 50]
end
I added an additional method in my AvatarUploader class:
def reprocess(x,y,w,h)
manipulate! do |img|
img.crop(x.to_i, y.to_i, w.to_i, h.to_i, true)
end
resize_to_limit(180,180)
end
which is called in my model after an update is performed:
attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
after_update :reprocess_image, :if => :cropping?
def cropping?
!crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
end
private
def reprocess_image
image.reprocess(crop_x,crop_y,crop_w,crop_h)
end
I have managed to crop and resize the original version, but I can't seem to update the 2 thumbnails along with it. I tried a few different techniques to no avail.
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
试试
对不起,在公共汽车上。我无法对此进行解释。
Try
Sorry, on the bus. I can't expound on that.
您需要在调用
recreate_versions!
之前调用image.cache_stored_file!
这很奇怪,因为如果文件被缓存,该方法本身会调用该方法,但由于某种原因它不起作用。
所以那就是这样的:
You need to call
image.cache_stored_file!
before callingrecreate_versions!
It's weird because the method itself calls that if the file is cached, but for some reason it wasn't working.
So that would be something like:
这个方法对我来说是最有帮助的(即使我不使用雾):
https://github.com/rierwaveuploader/rierwave/wiki/How-to:-Recreate-and-reprocess-your-files-stored-on-fog
我在模型上添加了一个重新处理方法,然后在 rake 任务中的每个循环中调用它:
Rake:
任务:reprocess_photos => : 环境做
MyModel.all.each{|mm| mm.重新处理}
结尾
PS
:Rails 4.2
This HowTo was most helpful for me (even if I don't use fog):
https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Recreate-and-reprocess-your-files-stored-on-fog
I added a reprocess method on my model and then called it in for each loop in my rake task:
Rake:
task :reprocess_photos => :environment do
MyModel.all.each{|mm| mm.reprocess}
end
PS: Rails 4.2
我没有尝试过,但也许会放类似的东西。
I haven't tried but maybe putting something like.
检查最新的 RailsCast:
http://railscasts.com/episodes/182-cropping-images-修改
裁剪图像的一个版本后,您可以计算其他版本的裁剪坐标,或者可能更简单,以与原始图像的其他版本相同的长宽比缩小裁剪后的图像
check this latest RailsCast:
http://railscasts.com/episodes/182-cropping-images-revised
after cropping one version of the image, you can then either calculate the cropping coordinates for the other versions, or probably easier, scale down the cropped image with the same aspect ratios as the other versions of the original image