最近、ある要求を受け取りました。その要求は、画像の画像にテキストを挿入することです。挿入される具体的なテキストはプログラムによって異なります。たとえば、次の画像:
実績名、達成単位、達成者名を記入する必要があります。
ペイントツールを開いてテキストを選択します
次に、テキスト ボックスを使用して余白を測定します。余白を使用して、テキストが書かれている位置を特定できます。幅は 1105 です。
高さ530
実装されたコードは次のとおりです。
@GetMapping("/downImg")
public void downImg(HttpServletResponse response) {
downloadService.downImg(response);
}
次のコードでは、hutool ツール クラスを使用する IoUtil を除き、その他は Java 基本クラスに属します (他の依存関係を導入せずに使用できます)。
public void downImg(HttpServletResponse response) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/中医药科技成果登记证书.png");
Image src = ImageIO.read(inputStream);
// 获取图片的高和宽
int wideth = src.getWidth(null);
int height = src.getHeight(null);
// 新增一个图片缓冲
BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);
// 设置字体颜色(颜色也可以直接new定义rgba,例如new Color(17, 16, 44))
g.setColor(Color.BLACK);
// size字体大小,Font.BOLD字体加粗
g.setFont(new Font("宋体", Font.BOLD, 50));
// 写入成果名称,由宽度减去我们测的宽度度,就等于要开始写的位置
g.drawString("测试测试", wideth - 1105, height - 530);
// 释放资源
g.dispose();
responseSetting(response, "中医药科技", ".png", "image/png");
outputStream = response.getOutputStream();
ImageIO.write(image, "png", outputStream);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
IoUtil.close(inputStream);
IoUtil.close(outputStream);
}
}
テスト:
Font クラスについて:public Font(String name, int style, int size)
- 名前: フォント、中国語フォント名: Song Ti、Kai Ti、Hei Ti など、英語フォント名: Arial、Times New Roman など。
- スタイル: スタイル
- Font.PLAIN(プレーン)
- Font.BOLD(太字)
- Font.ITALIC (イタリック)
- Font.BOLD+Font.ITALIC (斜体の太字)
- サイズ: 文字サイズ