获取 Active Storage 变体的元数据
Get metadata of Active Storage variant
我有一个 Active Storage 映像变体,例如
<%= image_tag model.logo_image.variant(resize_to_fit: [300, 200]) %>
我正在尝试获取此变体的 width
和 height
值(因为它们未知)以用于 width
和 height
HTML属性。
我预计他们会在这里:
model.logo_image.variant(resize_to_fit: [300, 200]).processed.blob.metadata
但这给了我原始文件的元数据,而不是调整大小的变体,例如
{"identified"=>true, "width"=>800, "height"=>174, "analyzed"=>true}
如何获取 Active Storage 变体的维度?
使用 Rails 6.1,最终所有变体都存储在一个新的 model/database table 中,每个变体都带有一个 Blob。如果此功能与您相关,请尝试升级。
非常深入对象,然后您可以找到变体 blob,从而找到元数据!
尝试:
model.logo_image.
variant(resize_to_fit: [300, 200]).
processed.send(:record).image.blob.metadata
它第一次不起作用,当第一次调用时,它没有 width/height,因为 AnalyzeJob 将异步 运行,它会添加 width/height"稍后”,具体取决于您的队列设置。
也许添加一个 helper_method 来创建具有宽度和高度的图像(如果可用):
module ApplicationHelper
def image_tag_for_attachment_with_dimensions(variant, opts = {})
if variant.processed?
metadata = variant.processed.send(:record).image.blob.metadata
if metadata['width']
opts[:width] = metadata['width']
opts[:height] = metadata['height']
end
end
image_tag variant, opts
end
end
# usage:
= image_tag_for_attachment_with_dimensions model.logo_image.variant(resize_to_fit: [300, 200])
我有一个 Active Storage 映像变体,例如
<%= image_tag model.logo_image.variant(resize_to_fit: [300, 200]) %>
我正在尝试获取此变体的 width
和 height
值(因为它们未知)以用于 width
和 height
HTML属性。
我预计他们会在这里:
model.logo_image.variant(resize_to_fit: [300, 200]).processed.blob.metadata
但这给了我原始文件的元数据,而不是调整大小的变体,例如
{"identified"=>true, "width"=>800, "height"=>174, "analyzed"=>true}
如何获取 Active Storage 变体的维度?
使用 Rails 6.1,最终所有变体都存储在一个新的 model/database table 中,每个变体都带有一个 Blob。如果此功能与您相关,请尝试升级。
非常深入对象,然后您可以找到变体 blob,从而找到元数据!
尝试:
model.logo_image.
variant(resize_to_fit: [300, 200]).
processed.send(:record).image.blob.metadata
它第一次不起作用,当第一次调用时,它没有 width/height,因为 AnalyzeJob 将异步 运行,它会添加 width/height"稍后”,具体取决于您的队列设置。
也许添加一个 helper_method 来创建具有宽度和高度的图像(如果可用):
module ApplicationHelper
def image_tag_for_attachment_with_dimensions(variant, opts = {})
if variant.processed?
metadata = variant.processed.send(:record).image.blob.metadata
if metadata['width']
opts[:width] = metadata['width']
opts[:height] = metadata['height']
end
end
image_tag variant, opts
end
end
# usage:
= image_tag_for_attachment_with_dimensions model.logo_image.variant(resize_to_fit: [300, 200])