[英]Rails Active Storage: How to create "named variants" that are cropped by user-supplied coordinates
我有类似的东西:
class User < ApplicationRecord
has_one_attached :avatar do |attachable|
attachable.variant :large, resize_to_limit: [300, nil]
attachable.variant :medium, resize_to_limit: [100, nil]
attachable.variant :small, resize_to_limit: [ 50, nil]
end
end
我如何创建...
[x, y, width, height]
是否有可能以某种方式“将坐标传递给模型”? 如果是,如何?
如果不是:是否需要在 controller 操作中单独进行裁剪,创建一个裁剪版本(原始文件),基于该版本创建“命名变体”? 如果是这样,那会是什么样子?
我会试着回答你的问题:
user.avatar.variant(:large)
。 如果在视图中完成,则附加.processed
以检索已生成的变体(如果存在)。resize_to_limit: [300, 100], crop: '200x300+0+0'
如果您想从参数中获取尺寸和坐标,那么我不会使用命名变体,而是使用类似
在模型中: has_one_attached :avatar
在控制器中:
def image_height
params[:height]
end
def generate_variant_small
@user.avatar.variant(resize_to_limit: "300x#{image_height}^", crop: '200x300+0+0').processed
end
这已添加到 Rails 7 ( https://github.com/rails/rails/pull/39135 ):
class User < ActiveRecord::Base
has_one_attached :avatar, variants: {
thumb: { resize: "100x100" },
medium: { resize: "300x300", monochrome: true }
}
end
class Gallery < ActiveRecord::Base
has_many_attached :photos, variants: {
thumb: { resize: "100x100" },
medium: { resize: "300x300", monochrome: true }
}
end
<%= image_tag user.avatar.variant(:thumb) %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.