进行图片操作前要先配置commons-io组件的依赖:pom.xml
组件地址:https://mvnrepository.com/artifact/commons-io/commons-io
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.wzt</groupId>
<artifactId>08io</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<!--commons-i0-->
<!--一种新的io操作方式-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
</project>
Imgstr1.java
/*
* Copyright (c) 2006 - 2022, wzt.cn All rights reserved.
*
*/
package cn.wzt;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.Random;
/**
* <p>Project: app2022 - Imgstr1
* <p>Powered by lenovo on 2022-01-21 14:57
* <P>Created by IntelliJ IDEA
*
* @author lenovo
* @version 1.0
* @since 17
*/
public class Imgstr1 {
public static void main(String[] args) {
int w=500;
int h=500;
int t=2;
BufferedImage bustr = new BufferedImage(w,h,t);
Graphics2D g = bustr.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
g.setColor(Color.WHITE);
g.fillRect(0,0,w,h);
//写入文字
String s="hello world";
Random r=new Random();
g.setColor(new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)));
// //系统字体,字体样式,大小
Font font = new Font("微软雅黑", Font.BOLD, 50);
// g.setFont(font);
//加载系统外字体http://a.xzfile.com/down3/czsfyj_downcc.com.zip
// var czsfyj = Imgstr1.class.getClassLoader().getResourceAsStream("czsfyj.ttf");//=
var czsfyj = Thread.currentThread().getContextClassLoader().getResourceAsStream("czsfyj.ttf");
try {
//引用系统外部字体deriveFont()设置字体大小
font = Font.createFont(Font.TRUETYPE_FONT, czsfyj).deriveFont(50f);
g.setFont(font);
System.out.println(font.getName());//输出文字名称
} catch (FontFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//获取字符串宽和高
FontMetrics khg = g.getFontMetrics(font);
System.out.println(khg.stringWidth(s));
System.out.println(khg.getHeight());
System.out.println(khg.getAscent());//确定此 FontMetrics 对象所描述的 Font 的字体上升。字体上升是从字体基线到大多数字母数字字符顶部的距离。字体中的某些字符可能会超出字体上升线
System.out.println(khg.getDescent());//确定此 FontMetrics 对象描述的 Font 的字体下降。字体下降是从字体基线到大多数带有下降的字母数字字符底部的距离
//修改字体位置(绝对位置)
int x=0;
int y=0;
//左上角
y= khg.getAscent()-khg.getDescent();
//右下角
x=w-khg.stringWidth(s);//数字的宽
y=h;
//正中央
x=(w-khg.stringWidth(s))/2;
y=(h+(khg.getAscent()-khg.getDescent()))/2;
//上中央
x=(w-khg.stringWidth(s))/2;
y= khg.getAscent()-khg.getDescent();
//下中央
x=(w-khg.stringWidth(s))/2;
y=h;
//右上角
x=w-khg.stringWidth(s);
y=khg.getAscent()-khg.getDescent();
//左下角
x=0;
y=h;
//中左
x=0;
y=(h+(khg.getAscent()-khg.getDescent()))/2;
//中右
x=w-khg.stringWidth(s);
y=(h+(khg.getAscent()-khg.getDescent()))/2;
//随机位置
Random random = new Random();
x=random.nextInt(0,w-khg.stringWidth(s));
y=random.nextInt(khg.getAscent()-khg.getDescent(),h);
g.drawString(s,x,y);
g.dispose();
try {
ImageIO.write(bustr,"png",new File("img1.png"));
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd /k start img1.png");
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:
代码中的“var czsfyj = Thread.currentThread().getContextClassLoader().getResourceAsStream("czsfyj.ttf");”加载的是系统外部的字体类型需自己下载或使用系统自带的字体类型。 czsfyj为“潮字社风云简”字体,下载地址:潮字社风云简字体下载-潮字社风云简ttf下载-绿色资源网
下载过后解压,将名字改为czsfyj之后放在项目的resource文件下,如下图所示: