Программирование на языке Ruby
Шрифт:
def do_flip(img)
img.flip
end
def do_rotate(img)
img.rotate(45)
end
def do_implode(img)
img = img.implode(0.65)
end
def do_resize(img)
img.resize(120,240)
end
def do_text(img)
text = Magick::Draw.new
text.annotate(img, 0, 0, 0, 100, "HELLO") do
self.gravity = Magick::SouthGravity
self.pointsize = 72
self.stroke = 'black'
self.fill = '#FAFAFA'
self.font_weight = Magick::BoldWeight
self.font_stretch = Magick::UltraCondensedStretch
end
img
end
def do_emboss(img)
img.emboss
end
def do_spread(img)
img.spread(10)
end
def do_motion(img)
img.motion_blur(0,30,170)
end
def do_oil(img)
img.oil_paint(10)
end
def do_charcoal(img)
img.charcoal
end
def do_vignette(img)
img.vignette
end
def do_affine(img)
spin_xform = Magick::AffineMatrix.new(1, Math::PI/6, Math::PI/6, 1, 0, 0)
img.affine_transform(spin_xform) #
Применить преобразование.
end
###
def example(old_file, meth, new_file)
img = Magick::ImageList.new(old_file)
new_img = send(meth, img)
new_img.write(new_file)
end
example("smallpic.jpg", :do_flip, "flipped.jpg")
example("smallpic.jpg", :do_rotate, "rotated.jpg")
example("smallpic.jpg", :do_resize, "resized.jpg")
example("smallpic.jpg", :do_implode, "imploded.jpg")
example("smallpic.jpg", :do_text, "withtext.jpg")
example("smallpic.jpg", :do_emboss, "embossed.jpg")
example("vw.jpg", :do_spread, "vw_spread.jpg")
example("vw.jpg", :do_motion, "vw_motion.jpg")
example("vw.jpg", :do_oil, "vw_oil.jpg")
example("vw.jpg", :do_charcoal, "vw_char.jpg")
example("vw.jpg", :do_vignette, "vw_vig.jpg")
example("vw.jpg", :do_affine, "vw_spin.jpg")
Мы
flip
, rotate
, implode
, resize
, annotate
и др. Результаты представлены на рис. 15.2. Рис. 15.2. Двенадцать специальных эффектов и трансформаций
О том, какие еще существуют трансформации изображений, читайте в онлайновой документации.
15.3.3. API рисования
В RMagick имеется развитый API для рисования линий, многоугольников и различных кривых. Он поддерживает заливку, полупрозрачность, выбор цвета, шрифтов, вращение, растяжение и другие операции.
Чтобы получить представление об имеющихся возможностях, рассмотрим простой пример.
В листинге 15.9 приведена программа, которая рисует на заданном фоне сетку, а поверх нее несколько закрашенных геометрических фигур. Черно-белое изображение, получившееся в результате, показано на рис. 15.3.
Листинг 15.9. Простая программа рисования
require 'RMagick'
img = Magick::ImageList.new
img.new_image(500, 500)
purplish = "#ff55ff"
yuck = "#5fff62"
bleah = "#3333ff"
line = Magick::Draw.new
50.step(450,50) do |n|
line.line(n,50, n,450) # Вертикальная прямая.
line.draw(img)
line.line(50,n, 450,n) # Горизонтальная прямая.
line.draw(img)
end
# Нарисовать круг.
cir = Magick::Draw.new
cir.fill(purplish)
cir.stroke('black').stroke_width(1)
cir.circle(250,200, 250,310)
cir.draw(img)
rect = Magick::Draw.new
Поделиться:
Популярные книги
Дорога Короля
Фантастика:
фэнтези
5.00
рейтинг книги
В тени завтрашнего дня
Научно-образовательная:
культурология
5.00
рейтинг книги
Законник Российской Империи
1. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
АН (цикл 11 книг)
Аномальный наследник
Фантастика:
фэнтези
героическая фантастика
попаданцы
аниме
5.75
рейтинг книги
Дважды одаренный. Том VI
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.50
рейтинг книги
Танцы на снегу
2. Геном
Фантастика:
научная фантастика
9.23
рейтинг книги
Точка Бифуркации XII
12. ТБ
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Место под солнцем
Анника Бенгтзон
Детективы:
криминальные детективы
6.00
рейтинг книги
Первопроходец
10. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
фэнтези
5.00
рейтинг книги
Тень в зеркале
1. Сказания трех миров
Фантастика:
фэнтези
7.38
рейтинг книги
Сексуальная жизнь мужчины. Книга 1
Дом и Семья:
образовательная литература
здоровье и красота
7.00
рейтинг книги
Шайтан Иван 6
6. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
7.50
рейтинг книги
Ангел пролетел
Любовные романы:
5.00
рейтинг книги
Найти себя
1. Магия - наше будущее. Раб из нашего времени
Фантастика:
боевая фантастика
8.08