LoginSignup
3
2

More than 5 years have passed since last update.

Javaの標準ライブラリを使ってScalaで画像に文字を追加してみる

Posted at

概要

Scalaで画像に文字を追加しようとするとき、もっとも手軽に実装できる方法がJavaの標準ライブラリを使う方法かなと思います。ので、基本的に実装内容はJavaとほぼ変わりないのですが、参考にしたサイトと合わせてサンプルコードを紹介します。

参考

少し多いですが、参考にした記事を列挙します。

サンプルコード

元にした画像の横へ、文字を追加して出力するサンプルコードです。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()
}

実行結果

【元画像】
200x50.png
【文字を追加した後の画像】
new_320x50.jpeg

3
2
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
2