我有類似的東西:
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] - 同時保持上傳的(原始)檔案不變?
是否有可能以某種方式“將坐標傳遞給模型”?如果是,如何?
如果不是:裁剪是否需要在控制器操作中單獨發生,創建一個裁剪版本(原始檔案的),基于該版本創建“命名變體”?如果是這樣,那會是什么樣子?
uj5u.com熱心網友回復:
我會試著回答你的問題:
- 我不認為您可以將引數傳遞給變體,因為定義在模型中。您可以在方法中生成變體(在控制器中 - 在保存/創建之前/之后的過濾器中)或在視圖中使用:
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
- 原始影像將保持不變。您上傳原始影像,然后所有變體都將作為新影像處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/477402.html
標籤:轨道上的红宝石 rails-activestorage 变体
