Javaは、画像へのテキスト(透かし)の追加を実装します

今すぐ共有:Javaコードを使用して画像にテキストを追加します。

たとえば、次の図では、左下隅に透かしのテキストバージョンを追加しましたが、これはどのように実現されますか?

コンテンツ

[1]元の画像オブジェクトを取得します

(1.1)地元の写真を読む

(1.2)ネットワーク画像を読む

[2]ブラシを作成する

【3】テキスト透かしを追加

(3.1)透かしの位置を決定する方法は?

[4]写真の取得と処理

【5】ソースコード


[1]元の画像オブジェクトを取得します

まず、最初のステップは、プログラムに処理が必要な画像を取得させることです。

通常、プログラムで画像を取得するには2つの方法があります。1つはローカルにダウンロードしてローカルから読み取る方法、もう1つはネットワークアドレスを介して取得する方法です。

(1.1)地元の写真を読む

たとえば、画像をローカルのコンピュータ(E:\ imgsディレクトリ)にダウンロードすると、次のコードを使用して、main関数で画像オブジェクトを直接取得できます。 

// 读取图片文件
File file = new File("E:/imgs/test.png");
System.out.println("图片名称:" + file.getName());
System.out.println("图片大小:" + file.length() / 1024 + " kb");
// 将文件对象转化为图片对象
BufferedImage image = ImageIO.read(file);
System.out.println("图片宽度:" + image.getWidth() + " px");
System.out.println("图片高度:" + image.getHeight() + " px");

 コードの効果は次のとおりです。

(1.2)ネットワーク画像を読む

画像がネットワーク画像の場合、ダウンロードするアドレスを直接取得できます。関連するコードは次のとおりです(ネットワーク画像の名前と種類はダウンローダーによって異なります)。

URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png");
BufferedImage image = ImageIO.read(url.openStream());
System.out.println("图片宽度:" + image.getWidth() + " px");
System.out.println("图片高度:" + image.getHeight() + " px");

コードの効果は次のとおりです。

[2]ブラシを作成する

以上の説明を経て、元の画像が得られました。次に、筆を作成する必要があります。後で書くテキストのスタイルは、それによって完全に決まります。色、フォントサイズ、フォントスタイルなどを設定できます。

// 创建画笔(image为上一步的图片对象)
Graphics2D pen = image.createGraphics();
// 设置画笔颜色为白色
pen.setColor(Color.WHITE);
// 设置画笔字体样式为微软雅黑,斜体,文字大小为20px
pen.setFont(new Font("微软雅黑", Font.ITALIC, 20));

関連する手順:

(1)pen.setColor(Color.WHITE); 

このコード行の意味は、ブラシの色を白に設定することです。

その他の色は、WHITE(白)、LIGHT_GRAY(ライトグレー)、GRAY(グレー)、DARK_GRAY(ダークグレー)、BLACK(黒)、RED(赤)、PINK(ピンク)、ORANGE(オレンジ)、YELLOW(イエロー)です。 、GREEN(グリーン)、MAGENTA(マゼンタ)、CYAN(シアン)、BLUE(ブルー)

上記の色のいずれも満足できない場合、またはフォントの透明度を設定する場合は、次の形式に変更できます。

pen.setColor(new Color(179、250、233、100));

ここでの4つのパラメーターはRGBA(RGBAを理解していない場合は、ここをクリックしてください)であり、4つのパラメーターの範囲は0〜255です。

(2)pen.setFont(new Font( "Microsoft Yahei"、Font.ITALIC、20));

Font.PLAIN(通常)、Font.BOLD(太字)、Font.ITALIC(斜体)

【3】テキスト透かしを追加

次のコード行は、テキスト透かしを追加するためのコアコードです。

// 这三个参数分别为你的文字内容,起始位置横坐标(px),纵坐标位置(px)。
pen.drawString("我是图片水印", 30, 550);

(3.1)透かしの位置を決定する方法は?

まず、次のように、表現である画像上の座標について話していることを誰もが理解する必要があります。

では、透かしを入れた画像の実際の座標をどのように決定するのでしょうか。

最初に画像をローカルに保存してから、右クリックしてペイントツールクラスを選択して開きます。

 開いた後、テキストを追加する必要のある場所(赤い矢印など)にマウスカーソルを移動すると、対応する位置の座標(青い矢印)が下部に表示され、これを取得できます。調整してから、プログラムコードに書き込みます。

[4]写真の取得と処理

上記の3つの操作の後、画像が追加されたテキストは処理されましたが、Javaオブジェクトに保存されているため、ローカルに保存する必要があります。効果を確認できます(たとえば、ここでは、処理された画像をtest2に保存します。 png)。

// 创建新图片文件
File file = new File("E:/imgs/test2.png");
// 将处理好的图片数据写入到新图片文件中
FileOutputStream fos = new FileOutputStream(file);
ImageIO.write(image, "png", fos);

最後に、コードを実行すると、元の画像フォルダーの下にtest2.pngの追加の画像があることがわかります。

 test2.png画像を開くと、テキスト透かしが正常に追加されたことがわかります。

【5】ソースコード

最後に、前の解釈のソースコード全体を参照用に以下に配置します。

package com.zyq.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

public class ImgTest {

    public static void main(String[] args) throws IOException {
        // 读取本地图片文件
        // File file = new File("E:/imgs/test.png");
        // System.out.println("图片名称:" + file.getName());
        // System.out.println("图片大小:" + file.length() / 1024 + " kb");
        // 将文件对象转化为图片对象
        // BufferedImage image = ImageIO.read(file);
        // 获取网络图片
        URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png");
        BufferedImage image = ImageIO.read(url.openStream());
        // 创建画笔
        Graphics2D pen = image.createGraphics();
        // 设置画笔颜色为白色
        // pen.setColor(Color.WHITE);
        pen.setColor(new Color(179, 250, 233, 200));
        // 设置画笔字体样式为微软雅黑,斜体,文字大小为20px
        pen.setFont(new Font("微软雅黑", Font.ITALIC, 20));
        // 写上水印文字和坐标
        pen.drawString("我是图片水印", 30, 550);
        // 创建新图片文件
        File file = new File("E:/imgs/test2.png");
        // 将处理好的图片数据写入到新图片文件中
        FileOutputStream fos = new FileOutputStream(file);
        ImageIO.write(image, "png", fos);
    }
}

おすすめ

転載: blog.csdn.net/sunnyzyq/article/details/122452216