Версии Carrierwave и изображения: неверно сгенерированы URL версии, если исходный файл и файл версии не имеют одинаковый формат (PNG против JPG) - PullRequest
0 голосов
/ 11 марта 2020

Этот вопрос тесно связан с 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

После загрузки результат будет следующие файлы:

  • 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), но мне нужно, чтобы это работало правильно. Любая идея?

В общем, плохая идея иметь версии изображения в другом формате, чем исходное изображение?

...