Как я могу нарисовать зеркальный текст на изображение с помощью ImageMagick?
Я использую ImageMagick (через MiniMagick Ruby Gem), чтобы обрезать изображение, я также добавляю аннотацию к его верхней части, но я хочу, чтобы оно было зеркальным.
Я знаю, что в ImageMagick есть команда "flop", которая зеркально отображает изображение, но я не уверен, как сгенерировать текст, вставить его и наложить на мое изображение.
Вот как я сейчас рисую текст (без зеркального отображения). В этом коде используется MiniMagick, но он довольно быстро преобразуется в реальные команды ImageMagick.
image.combine_options do |c|
c.resize "1000"
c.font Rails.root.join('app/assets/fonts/Menlo.ttc').to_s
c.fill '#888888'
c.pointsize '16'
c.draw "text 0,0 '#{annotation}'"
end
Как я могу изменить или заменить это, чтобы нарисовать зеркальный текст?
2 ответа
Теперь, когда Натан признает, что он "знаком" с -flip
а также -flop
только для изображений, давайте покажем ему, как это можно использовать, чтобы, тем не менее, переворачивать и вставлять текстовые аннотации на неизмененные изображения.
Смотрите эти два примера:
Слева с обычным текстом, справа с зеркальным текстом (зеркальное отображение слева направо - Натан не ответил на вопрос, хочет ли он этого или хочет зеркальное отображение сверху вниз).
Как это было сделано?
Аннотация левого изображения была сделана с помощью следующей команды:
convert \
logo: \
-fill white \
-undercolor '#00000080' \
\( \
-gravity west \
-pointsize 32 \
-annotate +0+40 \
" Dude! Listen, don't argue... " \
\) \
-scale 310x \
normal.png
Таким образом, этот результат является основой для следующего шага. На следующем шаге мы изменим эту команду, чтобы создать зеркальную текстовую аннотацию. Но, поскольку мы не можем написать зеркальный текст напрямую, мы используем один из многих приемов в наших рукавах:
- Зеркальное отображение изображения первым (первым
-flop
). - Напишите нормальный текст на зеркальном изображении.
- Зеркально отразить полученное изображение еще раз (второй
-flop
). Сюда...- ... основное изображение вернулось к нормальному состоянию,
- ... текст аннотации зеркально отражен.
И это приводит к команде аннотации на левом изображении:
convert \
logo: \
-flop \
-fill white \
-undercolor '#00000080' \
\( \
-gravity east \
-pointsize 32 \
-annotate +0+40 \
" Dude! Listen, don't argue... " \
\) \
-flop \
-scale 310x \
mirrored.png
Легко, а?
(Просто обратите внимание, как мы также должны были изменить гравитацию с запада на восток, чтобы текст появлялся на том же месте...)
Теперь Натан сам должен перевести этот алгоритм на язык Minimagick.
Во-первых, вы должны для своего кода Minimagick выполнить "непосредственный перевод на реальные команды ImageMagick", если вы действительно заинтересованы в получении максимально возможного ввода. Не каждый здесь хочет сначала изучить Minimagick, прежде чем он сможет присоединиться к его предложениям.
Во-вторых, вы не сказали, каким образом вы хотите, чтобы ваш текст зеркально отображался: влево-вправо? Сверху вниз? Комбинированное?
В-третьих, попробуйте заменить эти 2 строки
c.pointsize '16'
c.draw "text 0,0 '#{annotation}'"
этими тремя строчками
c.pointsize '16'
c.draw "text 0,0 '#{annotation}'"
c.flop
или этими тремя строчками
c.pointsize '16'
c.draw "text 0,0 '#{annotation}'"
c.flip
или этими 4 линиями
c.pointsize '16'
c.draw "text 0,0 '#{annotation}'"
c.flip
c.flop