Этот вопрос тесно связан с Carrierwave: преобразовать загруженный PNG в JPG, заменив исходную версию .
У меня есть следующая модель:
class ScreenshotUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
convert :jpg
version :thumb do
process resize_to_fill: [50, 50]
end
def extension_whitelist
%w(jpg jpeg gif png)
end
version :print do
process border: ['black']
process quality: 80
end
end
Загрузка изображения происходит путем вставки изображения из буфера обмена через https://github.com/layerssss/paste.js и сохраняется как строка в кодировке base64 в <textarea>
, а затем загружается с использованием https://github.com/y9v/carrierwave-base64 gem:
class Finding < ApplicationRecord
mount_base64_uploader :screenshot, ScreenshotUploader
end
В форме HTML это выглядит так:
![upload form](https://i.stack.imgur.com/S7hxP.png)
После загрузки результат будет следующие файлы:
screenshot.png
это PNG, а не JPG! thumb_screenshot.jpg
print_screenshot.jpg
Теперь, когда я пытаюсь использовать image.url(:thumb)
, он возвращает путь с добавленным .png
, а не jpg
. Я предполагаю, что это потому, что исходный файл является png
файлом, а не jpg
файлом; но это мне кажется ошибкой.
В настоящее время я исправляю это с помощью image.url(:thumb)[0...-3]}jpg
(чтобы вручную заменить png
на jpg
), но мне нужно, чтобы это работало правильно. Любая идея?
В общем, плохая идея иметь версии изображения в другом формате, чем исходное изображение?