3
0

More than 3 years have passed since last update.

mini_magickで縦書き文字入り画像を生成

Last updated at Posted at 2021-05-30

概要

rubyで画像処理を行うことができるgemである「mini_magick」を使用し、縦書き文字入りの画像を生成する方法です。

環境

ruby 2.6.5p114 (2019-10-01 revision 67812)
mini_magick (4.11.0)

前提条件

mini_magickが使用できること。

やり方

以下のようなベースとなる画像を用意し、そこに縦書きの文字を載せていきます。
base.png

以下のcreate_vertical_word_imageメソッドを実行することで縦書き文字入りの画像を生成することができます。insert_vertical_wordメソッドの中で1文字ずつ座標をずらしながら描画していきます。「ー」は何もしないと横線のままなので90度回転させ描画していきます。

  # ベース画像に縦書き文字を載せます。
  def create_vertical_word_image
    require 'mini_magick'
    image = MiniMagick::Image.open('./app/assets/images/base.png')
    word = "縦書きですー"
    fontsize = 30
    color = '#000000'
    image.combine_options do |config|
      config.font "../usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc"
      config.pointsize fontsize
      config.fill color
      insert_vertical_word(word, 600, 100, fontsize, config)
    end
    image.write "result.png"
  end

  # 一文字ずつ文字を設定していきます。伸ばし棒は90度回転させています。
  def insert_vertical_word(word, x, y, fontsize, config)
    word.chars.each_with_index do |c, i|
      if c == "ー"
        config.gravity 'SouthWest'
        config.rotate -90
        config.draw "text #{y + i * fontsize + fontsize / 4},#{x - fontsize / 5} '#{c}'"
        config.rotate 90
      else
        config.gravity 'NorthWest'
        config.draw "text #{x},#{y + i * fontsize} '#{c}'"
      end
    end
  end

生成された画像がこちらになります。
result.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0