Я хотел преобразовать изображение 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
Вы можете добавить опцию -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
Я не знаю, поддерживает ли imagemagick что-то подобное. Вы можете спросить в их разделе обсуждения на github github.com/ImageMagick/ImageMagick/discussions, может быть, у кого-то есть идея.
Спасибо, Бруно, но сжатие не соответствует фактору сохранения размера файла меньше или равного 100 КБ. Что мне сделать, чтобы сохранить его <= 100 КБ для всех изображений.