Help us understand the problem. What is going on with this article?

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

概要

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした