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

на главную - закладки

Жанры

Программирование на языке 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'

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

Сирийский рубеж

Дорин Михаил
5. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж

Я до сих пор не царь. Книга XXVII

Дрейк Сириус
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII

Тринадцатый VIII

NikL
8. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VIII

Мечников. Из доктора в маги

Алмазов Игорь
1. Жизнь Лекаря с нуля
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Мечников. Из доктора в маги

Князь Андер Арес 2

Грехов Тимофей
2. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Князь Андер Арес 2

Ветер перемен

Ланцов Михаил Алексеевич
5. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ветер перемен

Бояръ-Аниме. Газлайтер. Том 30

Володин Григорий Григорьевич
30. История Телепата
Фантастика:
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 30

Сильнейший Столп Империи. Книга 1

Ермоленков Алексей
1. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 1

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Имперец. Том 1 и Том 2

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

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Выйду замуж за спасателя

Рам Янка
1. Спасатели
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Выйду замуж за спасателя

Мир повелителей смерти

Муравьёв Константин Николаевич
10. Живучий
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Мир повелителей смерти

Гримуар темного лорда V

Грехов Тимофей
5. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда V