使用 minimagick 将 JPEG 转换为 TIFF

问题描述

我想将我的 jpeg 图像转换为具有某些标准的 tiff 图像,所有因素都得到满足,但我无法弄清楚如何减小尺寸,目前,转换后图像变为 1.2MB,我想要将其减少到小于或等于 100kb,分辨率为 200 dpi。 原始 jpeg 图像为 250kb,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

解决方法

您可以将 -compress 选项与 ZIPLZW 选项一起添加以启用对 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