概要
rubyで画像処理を行うことができるgemである「mini_magick」を使用し、縦書き文字入りの画像を生成する方法です。
環境
ruby 2.6.5p114 (2019-10-01 revision 67812)
mini_magick (4.11.0)
前提条件
mini_magickが使用できること。
やり方
以下のようなベースとなる画像を用意し、そこに縦書きの文字を載せていきます。
以下の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