概要
Scalaで画像に文字を追加しようとするとき、もっとも手軽に実装できる方法がJavaの標準ライブラリを使う方法かなと思います。ので、基本的に実装内容はJavaとほぼ変わりないのですが、参考にしたサイトと合わせてサンプルコードを紹介します。
参考
少し多いですが、参考にした記事を列挙します。
- Scala Documentation - Image processing:Scalaの画像読込・出力のドキュメント。
- JavaでJPEGファイルを読み込み、図や文字を書いて、出力する:画像に文字を追加する実装が紹介されてます。
- 【Java】 画像編集 ~ 画像を縦・横に結合する ~:画像に画像を結合する実装が紹介されてます。
- 【Java】ウィンドウに文字列を描画:フォントの設定に関する実装が紹介されてます。
- 背景を塗りつぶす:背景を塗りつぶしする実装が紹介されてます。
- 【Java】アンチエイリアシングの利用:文字のアンチエイリアシングの実装が紹介されてます。
- JavaでJPEG画像の保存品質を変更する:画像の保存品質を設定する実装が紹介されてます。
サンプルコード
元にした画像の横へ、文字を追加して出力するサンプルコードです。Scalaと言いつつ、ほぼJavaと変わらないと思います。
ImageWritingWordSample.scala
import java.awt.{Color, Font, RenderingHints}
import java.awt.image.BufferedImage
import java.io.{File, FileOutputStream}
import javax.imageio.{IIOImage, ImageIO, ImageWriteParam}
object ImageWritingWordSample extends App {
// 元画像の読み込み
val originalImage = ImageIO.read(new File(s"resources/200x50.png"))
// 新規画像に元画像を組み込み
val newImage = new BufferedImage(320, 50, originalImage.getType)
val graphics = newImage.createGraphics()
graphics.drawImage(originalImage, 0, 0, null)
// 文字を書くところの背景色
graphics.setColor(Color.WHITE)
graphics.fillRect(200, 0, 320, 50)
// フォントの設定
graphics.setFont(new Font("Arial", Font.PLAIN, 12))
// 文字色
graphics.setColor(Color.BLACK)
// アンチエイリアス
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON)
// 文字の追加
graphics.drawString("テストテスト", 210,20)
graphics.drawString("テストテスト", 210,40)
// 画像出力
val os = new FileOutputStream("resources/new_320x50.jpeg")
val ios = ImageIO.createImageOutputStream(os)
val writer = ImageIO.getImageWritersByFormatName("jpeg").next
val param = writer.getDefaultWriteParam
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT)
// 画像品質の設定
param.setCompressionQuality(1.0f)
writer.setOutput(ios)
writer.write(null, new IIOImage(newImage, null, null), param)
writer.dispose()
}