import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* @author yaoyuanliang
* @date 2018/1/19
*/
public class FontImageUtil {
public static byte[] generateImage(String name,int width,int height,String fontName,int size){
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
// 创建BufferedImage对象
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取Graphics2D
Graphics2D g2d = image.createGraphics();
// ---------- 增加下面的代码使得背景透明 -----------------
image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g2d.dispose();
g2d = image.createGraphics();
// ---------- 背景透明代码结束 -----------------
// 画图
g2d.setColor(new Color(255,0,0));
g2d.setStroke(new BasicStroke(1));
FontRenderContext context = g2d.getFontRenderContext();
Font font= new Font(fontName,Font.BOLD,size);
g2d.setFont(font);
Rectangle2D bounds = font.getStringBounds(name, context);
double x = (width - bounds.getWidth()) / 2;
double y = (height - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
//绘制字符串
g2d.drawString(name, (int)x+25, (int)baseY);
//释放对象
g2d.dispose();
// 保存文件
ImageIO.write(image, "png",out);
} catch (IOException e) {
e.printStackTrace();
}
return out.toByteArray();
}
@Test
public void test_19(){
try {
String name="爱新觉";
int width=280;
int height=120;
String fontName="薛文轩钢笔楷体";
int size=66;
byte[] bytes = FontImageUtil.generateImage(name, width, height, fontName, size);
String dic = "D:\\12\\";
String ctime = System.currentTimeMillis()+"";
File file = new File(dic+ctime+".png");
FileUtils.writeByteArrayToFile(file,bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
}
生成文字图片
最新推荐文章于 2023-05-31 13:38:04 发布