LoginSignup
1
2

Javaで画像上にテキストを描画する方法

Last updated at Posted at 2023-06-27

こんにちは、みなさん。今日はJavaで画像上にテキストを描画する方法をみなさんにご紹介します。プログラミング初心者の方でも、この記事を読んでいただくことで、具体的なコードを使って、画像上にテキストを挿入することが可能になるでしょう。

1. 必要なファイルの読み込み

まず、フォントと背景画像を読み込むためのコードを書きます。以下のようにFont.createFont()ImageIO.read()を使用します。

var font = Font.createFont(Font.TRUETYPE_FONT, Main.class.getResourceAsStream("/IBMPlexSansJP-Text.ttf"));
font = font.deriveFont(50f);
final var originalImg = ImageIO.read(Main.class.getResourceAsStream("/background.png"));

2. 画像のリサイズ

画像を特定のサイズにリサイズします。アスペクト比を保ちつつ、新しいBufferedImageオブジェクトを作成し、そこに元の画像を描画します。

final var width = 1024;
final var height = (int) (((double) width / (double) originalImg.getWidth()) * originalImg.getHeight());
final var img = new BufferedImage(width, height, originalImg.getType());
final var g2dResized = img.createGraphics();
g2dResized.drawImage(originalImg, 0, 0, width, height, null);
g2dResized.dispose();

3. テキストの準備と配置

テキストを作成し、それを画像上に描画します。ここではテキストを中心に配置する方法を解説します。テキストの配置は、全体の高さ(行数 x 行の高さ)を元に計算し、それを画像の高さの半分から引くことで実現します。

final var g2d = img.createGraphics();
g2d.setFont(font);
g2d.setColor(Color.BLACK);

final var originalText = "こんにちは、世界!あいうえおかきくけこさしすせそたちつてと";
final var text = Main.insertNewlines(originalText, 12); // 12 characters per line
final var x = img.getWidth() / 2;
final var numLines = text.split("\n").length;
var y = img.getHeight() / 2 - (numLines * lineHeight) / 2 + fm.getAscent();

for (final String line : text.split("\n")) {
    final var textWidth = fm.stringWidth(line);
    g2d.drawString(line, x - textWidth / 2, y);
    y += lineHeight;
}

g2d.dispose();

4. 最終的な画像の生成

最後に、BufferedImageをImageIO.write()を使用して出力ファイルに書き込みます。

ImageIO.write(img, "jpg", new File("output.jpg"));

以上の手順により、Javaで画像上にテキストを描画することができます。このコードを活用し、自分だけのオリジナル画像を生成してみてください。新たな発見があるかもしれませんよ!

5. 改行文字の挿入

テキストを適切にフォーマットするためには、適切な位置で改行を挿入することが必要です。このプログラムでは、insertNewlines()メソッドを使用して、12文字ごとに改行を挿入しています。

public static String insertNewlines(final String original, final int charsPerLine) {
    final var sb = new StringBuilder();
    var start = 0;
    while (start < original.length()) {
        final var end = Math.min(start + charsPerLine, original.length());
        sb.append(original, start, end);
        if (end < original.length()) {
            sb.append("\n");
        }
        start = end;
    }
    return sb.toString();
}

以上、Javaを使って画像上にテキストを描画する方法についてご紹介しました。この方法を使えば、自分だけの画像にテキストを追加し、オリジナルのビジュアルコンテンツを作成することが可能になります。

こちらで作ったソースコードはこちらにアップしておきます。

それでは、みなさんもぜひ挑戦してみてください。楽しいプログラミングライフを!

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