Rails: получение JPG вместо HEI C из Cloudinary - PullRequest
0 голосов
/ 21 марта 2020

В настоящее время я работаю над приложением Rails 6, использующим ActiveStorage, где я пытаюсь отобразить изображения в формате jpg. Я использую Cloudinary для рендеринга изображений. Я пытаюсь поддерживать .HEIC изображения в моем веб-приложении. Пользователь может загрузить HEIC изображения в Cloudinary, но я бы хотел, чтобы мое приложение отображало изображение как jpg

. Когда я отображаю изображение, я вижу, что браузер отображает изображение HEIC, которое не поддерживается браузерами. enter image description here

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") %>

Но изображение все еще вызывает формат изображения HEIC с этого URL:

https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.heic

Вместо вызова jpg

https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.jpg

Как я могу настроить Cloudinary и ActiveStorage для рендеринга изображений или преобразования изображений в JPG?

Ответы [ 3 ]

1 голос
/ 22 марта 2020

Похоже, что вы отправляете полный URL-адрес методу cl_image_tag.

Для cl_image_tag нужен только идентификатор publi c для генерации URL-адреса. Поэтому вызов должен быть следующим:

<%= cl_image_tag("wbnknx9ighl6p4ok072u7kd8r5og", :format => :png , class: "card-home__img") %>

Конечно, убедитесь, что сменили вышеуказанный идентификатор publi c на переменную, содержащую идентификатор publi c.

Вы можете получить publi c id ресурса в ответе на загрузку.

И одна заметка о разнице между format и fetch_format Cloudinary изменила бы значение 1014 *

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

В этом конкретном случае c оба будут давать одно и то же png изображение, но использование fetch_format позволит использовать одно из лучших функций Cloudinary, которая автоматически оптимизирует изображение, используя :fetch_format => "auto": https://res.cloudinary.com/demo/image/upload/f_auto/sample

1 голос
/ 22 марта 2020

Странно, документация в одном месте говорит, что аргумент fetch_format, тогда как другой показывает пример использования format.

В худшем случае, если у вас проблемы с помощником cl_image_tag, вы можете написать свой собственный для создания URL с расширением .png.

https://res.cloudinary.com/artsyspace/image/upload/v1584732132/wbnknx9ighl6p4ok072u7kd8r5og.jpg

0 голосов
/ 23 марта 2020

В Rails 6 .key вернет идентификатор изображения Cloudfare.

<%= cl_image_tag(post.image.key, :format => :jpg , class: "card-home__img") %>
...