JPEG в TIFF с использованием minimagick

Я хотел преобразовать изображение jpeg в изображение tiff с некоторыми критериями, все факторы соблюдены, но я не могу понять, как уменьшить размер, в настоящее время изображение после преобразования становится 1,2 МБ, я хочу его уменьшить размером менее или равным 100 КБ с разрешением 200 dpi. Исходное изображение в формате jpeg имеет размер 250 КБ и разрешение 456 X 679.

Как это сделать?

require 'mini_magick'

class FileConversionService

  def self.to_tiff
    input_path = "/images/1.jpg"
    image = MiniMagick::Image.open(input_path)
    k = image.format("tiff")
    k.write("/images/1_tiff")
    tiff_path = "/images/1_tiff"
    image_data = MiniMagick::Tool::Convert.new do |img|
        img << tiff_path
      img << '-resize' << "1600x734"
      img << '-colorspace' << "scRGB"
      img << '-density' << "700"
      img << '-background' << "white"
      img << '-verbose'
      img << tiff_path
    end
  end

end

FileConversionService.to_tiff

🤔 А знаете ли вы, что...
Rails использует множество гемов (gems) - пакетов, которые упрощают добавление функциональности в приложение.


362
1

Ответ:

Решено

Вы можете добавить опцию -compress с опцией ZIP или LZW, чтобы включить сжатие для TIFF. Но для большинства изображений TIFF будет больше, чем JPEG. Кроме того, вы указали параметр resize, который увеличивает ваше изображение до 979x734, делая его больше.

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

input_path = "/images/1.jpg"
image = MiniMagick::Image.open(input_path)
k = image.format("tiff")
k.write("/images/1_tiff")
tiff_path = "/images/1_tiff"

который открывает jpg и пишет tiff и второй раз делает

image_data = MiniMagick::Tool::Convert.new do |img|
    img << tiff_path
  img << '-resize' << "1600x734"
  img << '-colorspace' << "scRGB"
  img << '-density' << "700"
  img << '-background' << "white"
  img << '-verbose'
  img << tiff_path
end

который повторно открывает файл tiff, настраивает его на определенные параметры, а затем снова выводит в tiff_path. Это можно сделать за один раз, используя только convert:

input_path = "/images/1.jpg"
tiff_path = "/images/1.tiff"
MiniMagick::Tool::Convert.new do |img|
  img << input_path
  img << '-compress' << 'ZIP'      
  img << '-resize' << "1600x734"
  img << '-colorspace' << "scRGB"
  img << '-density' << "700"
  img << '-background' << "white"
  img << tiff_path
end