略過至內容 略過至搜尋

Active Storage 變數

影像 blob 可以有變數,這些變數是應用在原始影像的一組轉換的結果。這些變數用於從原始影像建立縮圖、固定尺寸大頭貼,或任何其他衍生影像。

變數依賴於 ImageProcessing gem,以實際轉換檔案,如果您想要使用變數,您必須將 gem "image_processing" 加入您的 Gemfile。預設情況下,影像將會使用 ImageMagick 搭配 MiniMagick gem 處理,但您也可以切換到 libvips 處理器,由 ruby-vips gem 執行)處理。

Rails.application.config.active_storage.variant_processor
# => :mini_magick

Rails.application.config.active_storage.variant_processor = :vips
# => :vips

請注意,要建立變數,有必要從服務下載整個 blob 檔案。因為這個處理程序,您也希望慎重考慮實際處理變數的時間。例如,您不應該在範本中內嵌處理變數。延遲處理到依需求而定的控制器,像是 ActiveStorage::RepresentationsController 中提供的控制器。

若要參考這樣的延遲、依需求而定的變數,只要透過 Active Storage 提供的已解析路由連結到變數,如下所示

<%= image_tag Current.user.avatar.variant(resize_to_limit: [100, 100]) %>

這將建立一個特定 blob 與特定變數的網址,接著 ActiveStorage::RepresentationsController 可以依需求產生該變數。

當您確實想要產生需要的變數時,呼叫 processed。這將檢查變數是否已經處理過並上傳到服務,如果是,則只會傳回該變數。否則,它將執行轉換,將變數上傳到服務,並再次傳回本身。範例

avatar.variant(resize_to_limit: [100, 100]).processed.url

這將建立並處理大頭貼 blob 的變數,該變數限制在高度和寬度 100 內。然後,它會根據 blob 的衍生金鑰和轉換,將所述變數上傳到服務。

您可以將任何數量的 ImageMagick/libvips 操作組合成一個變數,以及 ImageProcessing gem 提供的任何巨集(例如 resize_to_limit

avatar.variant(resize_to_limit: [800, 800], colourspace: "b-w", rotate: "-90")

請訪問以下連結,以取得 ImageProcessing 指令和 ImageMagick/libvips 操作的清單

命名空間