Чтение онлайн

на главную

Жанры

Программирование на языке Ruby
Шрифт:

 res = Magick::PixelsPerInchResolution ? "дюйм" : "см"

 puts <<-EOF

 Файл: #{fname}

 Формат: #{fmt}

 Размеры: #{w}x#{h} пикселей

 Цветов: #{nc}

 Длина файла: #{nb} байтов

 Разрешение: #{xr}/#{yr} пикселей на #{res}

 EOF

 puts

end

show_info("smallpic.jpg")

show_info("vw.jpg")

Вот

результат работы этой программы:

Файл:smallpic.jpg

Формат: JPEG

Размеры: 257x264 пикселей

Цветов: 248

Длина файла:19116 байтов

разрешение: 72.0/72.0 пикселей на дюйм

Файл: vw.Jpg

Формат: JPEG

размеры: 640x480 пикселей

Цветов: 256

Длина файла:55892 байтов

Разрешение: 72.0/72.0 пикселей на дюйм

2.0 pixels per inch

Посмотрим, как именно работает эта программа. Для чтения файла мы вызываем метод

Magick::Image::read
. Поскольку один файл (например, анимированный GIF) может содержать несколько изображений, эта операция возвращает массив изображений (мы получаем лишь первое, вызывая метод
first
). Для чтения файла можно также воспользоваться методом
Magick::ImageList.new
.

У объекта, представляющего изображение, есть ряд методов чтения:

format
(название формата изображения),
filesize
,
depth
и другие. Не так очевидно, что для получения ширины и высоты изображения служат методы
columns
и
rows
соответственно (поскольку изображение представляется в виде прямоугольной таблицы пикселей). Разрешение представляется двумя числами, так как может быть разным по вертикали и горизонтали.

Можно получить и другие метаданные об изображении. Подробнее об этом вы можете прочитать в онлайновой документации по RMagick.

Часто возникает необходимость перевести изображение из одного формата в другой. В RMagick это проще всего сделать, прочитав изображение из файла в одном из поддерживаемых форматов и записав его в другой файл. Новый формат определяется расширением имени файла. Понятно, что «за кулисами» при этом происходит преобразование данных. Пример:

img = Magick::Image.read("smallpic.jpg")

img.write("smallpic.gif") # Преобразовать в формат GIF.

Иногда нужно изменить размер изображения (сделать его больше или меньше). Для этого обычно применяется один из четырех методов:

thumbnail
,
resize
,
sample
и
scale
. Все они принимают либо число с плавающей точкой (коэффициент масштабирования), либо два числа (новые размеры в пикселях). Различия между этими методами продемонстрированы в листинге 15.7. Если вас волнует быстродействие, рекомендую провести тесты на своем
компьютере, используя собственные данные.

Листинг 15.7. Четыре способа масштабирования изображения

require 'RMagick'

img = Magick::ImageList.new("vw.jpg")

# Все эти методы могут принимать либо один параметр - коэффициент

# масштабирования, либо два - ширину и высоту.

# Метод thumbnail самый быстрый, особенно если нужно получить очень

# маленькое изображение.

pic1 = img.thumbnail(0.2) # Уменьшить до 20%.

pic2 = img.thumbnail(64,48) # Новый размер - 64x48 пикселей.

# resize работает со средней скоростью. Если заданы третий и четвертый

# параметры, то они интерпретируются как фильтр и размывание

# соответственно. По умолчанию подразумевается фильтр LanczosFilter

# и коэффициент размывания 1.0.

pic3 = img.resize(0.40) # Уменьшить до 40%.

pic4 = img.resize(320,240) # Новый размер - 320x240.

pic5 = img.resize(300,200,Magick::LanczosFilter,0.92)

# Метод sample также имеет среднее быстродействие (и не выполняет

# интерполяцию цветов).

pic6 = img.sample(0.35) # Уменьшить до 35%.

pic7 = img.sample(320,240) # Новый размер - 320x240.

# Метод scale в моих тестах оказался самым медленным.

pic8 = img.scale(0.60) # Уменьшить до 60%.

pic9 = img.scale(400,300) # Новый размер - 400x300.

Изображения можно подвергать и многим другим трансформациям. Некоторые просты и понятны, другие гораздо сложнее. В следующем разделе мы рассмотрим несколько интересных трансформаций и специальных эффектов.

15.3.2. Специальные эффекты и трансформации

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

В листинге 15.8 показано 12 различных эффектов. Метод

example
принимает имя файла, символ, соответствующий методу, и имя нового файла; он читает файл, вызывает метод и записывает результат в новый файл. Сами методы (скажем, do_rotate) по большей части просты — они получают изображение и вызывают его метод экземпляра (а возвращают результат трансформации).

Листинг 15.8. Двенадцать специальных эффектов и трансформаций

require 'Rmagick'

Поделиться:
Популярные книги

Гнев короля демонов

Фейст Рэймонд Элиас
3. Змеиные войны
Фантастика:
фэнтези
6.00
рейтинг книги
Гнев короля демонов

Под личиной

Гладкий Виталий Дмитриевич
Детективы:
боевики
6.25
рейтинг книги
Под личиной

Лекарь Империи 7

Карелин Сергей Витальевич
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 7

Соть

Леонов Леонид Максимович
Проза:
советская классическая проза
5.00
рейтинг книги
Соть

Бессмертный

Слэттон Трейси
Книга на все времена
Приключения:
исторические приключения
7.71
рейтинг книги
Бессмертный

Тузы за границей

Мартин Джордж Р.Р.
4. Дикие карты
Фантастика:
научная фантастика
7.14
рейтинг книги
Тузы за границей

Зов Атлантиды

Риддл А. Дж.
3. Тайна происхождения
Фантастика:
научная фантастика
альтернативная история
7.62
рейтинг книги
Зов Атлантиды

Жрец Хаоса. Книга III

Борзых М.
3. Зов пустоты
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Жрец Хаоса. Книга III

Месть Седьмой

Лор Питтакус
5. Наследие Лориена
Фантастика:
фэнтези
9.05
рейтинг книги
Месть Седьмой

Имперец. Том 4

Романов Михаил Яковлевич
3. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 4

Один триллион долларов

Эшбах Андреас
Детективы:
триллеры
8.00
рейтинг книги
Один триллион долларов

Река голубого пламени

Уильямс Тэд
2. Иноземье
Фантастика:
научная фантастика
6.25
рейтинг книги
Река голубого пламени

Остров любви

Нагибин Юрий Маркович
Проза:
современная проза
7.00
рейтинг книги
Остров любви

Избранное

Герт Юрий Михайлович
Проза:
современная проза
5.00
рейтинг книги
Избранное