Rails:从 Cloudinary 检索 JPG 而不是 HEIC
Rails: Retrieving JPG instead of HEIC from Cloudinary
我目前正在使用 ActiveStorage 开发 Rails 6 应用程序,我试图将图像呈现为 jpg。我正在使用 Cloudinary 来渲染图像。我试图在我的网络应用程序中支持 .HEIC
个图像。用户可以将 HEIC
图像上传到 Cloudinary,但我希望我的应用程序将图像呈现为 jpg
当我渲染图像时,我发现浏览器正在渲染浏览器不支持的 HEIC
图像。
ActiveStorage上传图片到云端:
Redirected to http://res.cloudinary.com/XXXXXXXXX/image/upload/xxxxxxxxxxxq3r4.HEIC
Completed 302 Found in 24ms (ActiveRecord: 16.1ms | Allocations: 2588)
[ActiveJob] [ActiveStorage::AnalyzeJob] [ac0d5880-xxxxxxxxxxxxxxxxxxxxxxxxxx] Cloudinary Storage (338.6ms) Downloaded file from key: kjpith3bxxxxxxxxxxxxxxxx
[ActiveJob] [ActiveStorage::AnalyzeJob] [ac0d5880-a243-4fef-xxxxxxxxxxxxxxxxxxxx] Skipping image analysis because ImageMagick doesn't support the file
但是,我尝试使用以下方法将视图中的图像渲染为 jpg
。
<%= cl_image_tag(url_for(post.image), :format => :jpg , class: "card-home__img") %>
但是图像仍然从这个url调用HEIC
图像格式:
https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.heic
而不是调用 jpg
https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.jpg
如何配置 Cloudinary 和 ActiveStorage 来渲染图像或将图像转换为 jpg?
奇怪的是,the documentation in one place says the argument is fetch_format
, while another 显示了一个使用 format
的示例。
最坏的情况是,如果您在使用 cl_image_tag
助手时遇到问题,您可以自己编写一个带有 .png
扩展名的 URL。
https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.jpg
您似乎正在将完整的 url 发送到 cl_image_tag
方法。
cl_image_tag
只需要 public id 即可生成 url。
所以调用应该是:
<%= cl_image_tag("wbnknx9ighl6p4ok072u7kd8r5og", :format => :png , class: "card-home__img") %>
当然,请确保将上面的硬编码 public id 更改为包含 public id 的变量。
您可以在上传的响应中获取资源的public id。
关于 Cloudinary 的 format
和 fetch_format
之间区别的一个注释:
format
会更改资源的扩展名,即
Cloudinary::Utils.cloudinary_url('sample', :format => "png")
会产生https://res.cloudinary.com/demo/image/upload/sample.png
在使用fetch_foramt
时将使用相关标志更改格式,即
Cloudinary::Utils.cloudinary_url('sample', :fetch_format => "png")
这将产生 https://res.cloudinary.com/demo/image/upload/f_png/sample
在这种特定情况下,两者都会生成相同的 png
图像,但使用 fetch_format
将允许使用 Cloudinary 的最佳功能之一,即使用 :fetch_format => "auto"
自动优化图像: https://res.cloudinary.com/demo/image/upload/f_auto/sample
在Rails6中,.key
将returnCloudfare的镜像ID。
<%= cl_image_tag(post.image.key, :format => :jpg , class: "card-home__img") %>
我目前正在使用 ActiveStorage 开发 Rails 6 应用程序,我试图将图像呈现为 jpg。我正在使用 Cloudinary 来渲染图像。我试图在我的网络应用程序中支持 .HEIC
个图像。用户可以将 HEIC
图像上传到 Cloudinary,但我希望我的应用程序将图像呈现为 jpg
当我渲染图像时,我发现浏览器正在渲染浏览器不支持的 HEIC
图像。
ActiveStorage上传图片到云端:
Redirected to http://res.cloudinary.com/XXXXXXXXX/image/upload/xxxxxxxxxxxq3r4.HEIC
Completed 302 Found in 24ms (ActiveRecord: 16.1ms | Allocations: 2588)
[ActiveJob] [ActiveStorage::AnalyzeJob] [ac0d5880-xxxxxxxxxxxxxxxxxxxxxxxxxx] Cloudinary Storage (338.6ms) Downloaded file from key: kjpith3bxxxxxxxxxxxxxxxx
[ActiveJob] [ActiveStorage::AnalyzeJob] [ac0d5880-a243-4fef-xxxxxxxxxxxxxxxxxxxx] Skipping image analysis because ImageMagick doesn't support the file
但是,我尝试使用以下方法将视图中的图像渲染为 jpg
。
<%= cl_image_tag(url_for(post.image), :format => :jpg , class: "card-home__img") %>
但是图像仍然从这个url调用HEIC
图像格式:
https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.heic
而不是调用 jpg
https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.jpg
如何配置 Cloudinary 和 ActiveStorage 来渲染图像或将图像转换为 jpg?
奇怪的是,the documentation in one place says the argument is fetch_format
, while another 显示了一个使用 format
的示例。
最坏的情况是,如果您在使用 cl_image_tag
助手时遇到问题,您可以自己编写一个带有 .png
扩展名的 URL。
https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.jpg
您似乎正在将完整的 url 发送到 cl_image_tag
方法。
cl_image_tag
只需要 public id 即可生成 url。
所以调用应该是:
<%= cl_image_tag("wbnknx9ighl6p4ok072u7kd8r5og", :format => :png , class: "card-home__img") %>
当然,请确保将上面的硬编码 public id 更改为包含 public id 的变量。
您可以在上传的响应中获取资源的public id。
关于 Cloudinary 的 format
和 fetch_format
之间区别的一个注释:
format
会更改资源的扩展名,即
Cloudinary::Utils.cloudinary_url('sample', :format => "png")
会产生https://res.cloudinary.com/demo/image/upload/sample.png
在使用fetch_foramt
时将使用相关标志更改格式,即
Cloudinary::Utils.cloudinary_url('sample', :fetch_format => "png")
这将产生 https://res.cloudinary.com/demo/image/upload/f_png/sample
在这种特定情况下,两者都会生成相同的 png
图像,但使用 fetch_format
将允许使用 Cloudinary 的最佳功能之一,即使用 :fetch_format => "auto"
自动优化图像: https://res.cloudinary.com/demo/image/upload/f_auto/sample
在Rails6中,.key
将returnCloudfare的镜像ID。
<%= cl_image_tag(post.image.key, :format => :jpg , class: "card-home__img") %>