生成文字图片



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();
}

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值