MiniMagick обернуть текст на изображение - PullRequest
0 голосов
/ 14 января 2019

На Rails 5.2.1 я пытаюсь использовать MiniMagick для написания текста на изображении. Проблема в том, что он выходит за границы ширины изображения для длинных текстов.

Я пытался использовать draw, label, annotation и caption методы из здесь , но ни один из них не дал мне правильного результата. caption даже не добавляет текст к изображению.

Это мой код:

      temp_img = MiniMagick::Image.open(url_for(@post.image))
      img_width = temp_img[:width]

      temp_img.combine_options do |c|
        c.gravity 'North'
        c.draw "text 0, 0 '#{top_txt}'"
        #c.annotate '0,0', "'#{top_txt}'" (same result)
        #c.caption "'#{top_txt}'" (same result)
        #c.label "'#{top_txt}'" (same result)
        c.gravity 'South'
        c.draw "text 0, 0 '#{bot_txt}'"
        #c.annotate '0,0', "'#{bot_txt}'" (same result)
        #c.caption "'#{bot_txt}'" (same result)
        #c.label "'#{bot_txt}'" (same result)
        c.stroke('#000000')
        c.strokewidth 1
        c.fill('#FFFFFF')
        c.size "#{img_width}x"
        c.pointsize '40'
        c.font "#{Rails.root.join('public', 'font',
        'Franklin_Gothic_Heavy_Regular.ttf')}"
      end

Это мой результат: enter image description here Самое близкое к решению, которое я видел, это это , но оно слишком грязное.

Может ли быть лучший способ?

1 Ответ

0 голосов
/ 15 января 2019

Извините, я не знаю Minimagick. Но в командной строке ImageMagick есть метка: она автоматически подгоняет текст к некоторому измерению, такому как ширина изображения. См. https://imagemagick.org/Usage/text/#label. Если MiniMagick не поддерживает это напрямую, возможно, вы могли бы использовать команды Ruby / Rmagick. Смотрите https://github.com/minimagick/minimagick (раздел методы), предполагая, что RMagick поддерживает метод label: like. Обратите внимание, что с label: и заголовком: вы должны создать новое изображение с текстом на прозрачном фоне, а затем скомпоновать его с исходным изображением.

Вот пример:

Введите:

enter image description here

convert image.png \( -size 639x -background none -font Arial -fill black label:"The quick brown fox jumps over the lazy dog" \) -gravity center -compose over -composite result.png


enter image description here

...