Метод повторной выборки RMagick изменяет размер изображения, а не изменяет его (разрешение DPI не изменяется) - PullRequest
1 голос
/ 02 августа 2011

Я использую метод RMagick resample, чтобы изменить разрешение DPI для имеющегося у меня изображения (с 300x300 до 72x72.

код, который я использую это:

original_image = Magick::Image.read("my300x300file.jpg") { self.density = "72.0x72.0" }
original_image.each do |image|
   image = image.resample(72.0, 72.0)
   image.density = "72x72"
   image.write("my72x72file.jpg") { self.quality = 50 }
end

После выполнения кода my72x72file.jpg размеры были уменьшены, но его разрешение DPI по-прежнему равно 300 (что означает, что размер файла не был уменьшен на на самом деле, даже если я установлю self.quality на 0, размер файла практически не изменится).

Ответы [ 3 ]

1 голос
/ 12 сентября 2013

Изменение разрешения вашего файла не меняет (и не должно изменять) размер файла.Разрешение - это число точек на дюйм, а размер файла определяется (после контроля всего остального, например, размера файла, сжатия и т. Д.) Количеством фактических пикселей, независимо от того, сколько дюймов они потребляют.

Если вы хотите изменить разрешение вашего изображения (то есть то, что говорят Photoshop, GIMP и т. Д.), Единственное, что я нашел, что работает, это создание нового изображения с надлежащим разрешением, а затем наложение вашего оригинала наЭто.Это кажется контрпродуктивным, но это единственный способ заставить его работать вообще.

Пример кода:

image = Magick::Image.read("my300x300file.jpg").first
dpi_image = Magick::Image.new(image.columns, image.rows) {
    self.density = "72x72"
    self.background_color = "none"
}
image = dpi_image.composite(image, Magick::CenterGravity, Magick::OverCompositeOp)
1 голос
/ 22 сентября 2011

Попробуйте image = image.resize_to_fit!(72.0, 72.0)
вместо image = image.resample(72.0, 72.0)

resize_to_fit изменяет размер изображения, тогда как resample изменяет разрешение (dpi) изображения. Обычно разрешение составляет 96 точек на дюйм или 72 точки на дюйм. Я не видел изображения с разрешением 300 точек на дюйм. Пожалуйста, попробуйте.

0 голосов
/ 11 сентября 2015

Старый вопрос, но я столкнулся с подобной проблемой, и, видимо, это все еще проблема.Изменение плотности изображения не решает проблему, если только не указаны единицы измерения (по умолчанию UndefinedResolution, в отличие от того, что указано в документации, здесь ).Настройка единиц измерения перед настройкой плотности работала для меня (наоборот - нет).В приведенном выше случае это должно быть что-то вроде:

original_image = Magick::Image.read("my300x300file.jpg") { self.density = "72.0x72.0" }
original_image.each do |image|
    image = image.resample(72.0, 72.0)
    image.units = Magick::PixelsPerInchResolution
    image.density = "72x72"
    image.write("my72x72file.jpg") { self.quality = 50 }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...