用java将文字输出为图片示例
import java.awt.Font;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.font.TextAttribute;
import java.util.HashMap;
import javax.imageio.*;
public class txt2img {
public static void main(String[] args) throws Exception {
String text = args[0];
String family = args[1];
String size = args[2];
String bold = args[3];
String italic = args[4];
String underline = args[5];
String fcolor = args[6];
String bcolor = args[7];
String filename = args[8];
HashMap<TextAttribute, Object> hm = new HashMap<TextAttribute, Object>();
// 定义字体
if (family.trim().equals("") || family == null || family == "default") {
hm.put(TextAttribute.FAMILY, "Simsun");
} else {
hm.put(TextAttribute.FAMILY, family);
}
// 定义字号
if (size.trim().equals("") || size == null) {
hm.put(TextAttribute.SIZE, 18);
} else {
hm.put(TextAttribute.SIZE, Integer.parseInt(size));
}
// System.out.println("size: " + size);
// 定义是否粗体
if (bold.trim().equals("1")) {
// System.out.println("bold");
hm.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
}
// 定义是否斜体
if (italic.trim().equals("1")) {
// System.out.println("italic");
hm.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
}
// 定义是否有下划线
if (underline.trim().equals("1")) {
// System.out.println("underline");
hm.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
}
// 设置字体颜色
if (fcolor.indexOf(",") == -1 || fcolor == null) {
hm.put(TextAttribute.FOREGROUND, new Color(0, 0, 0));
} else {
String[] fc = fcolor.split(",");
hm.put(TextAttribute.FOREGROUND, new Color(Integer.parseInt(fc[0]), Integer.parseInt(fc[1]), Integer.parseInt(fc[2])));
}
// 设置背景颜色
if (bcolor.indexOf(",") > -1 && bcolor != null) {
String[] bc = bcolor.split(",");
hm.put(TextAttribute.BACKGROUND, new Color(Integer.parseInt(bc[0]), Integer.parseInt(bc[1]), Integer.parseInt(bc[2])));
}
Font font = new Font(hm);
createImage(text, font, new File(filename));
}
// 根据str,font的样式以及输出文件目录
public static void createImage(String str, Font font, File outFile) throws Exception{
// 获取font的样式应用在str上的整个矩形
Rectangle2D r = font.getStringBounds(str, new FontRenderContext(AffineTransform.getScaleInstance(1, 1), false, false));
int unitHeight = (int)Math.floor(r.getHeight()) + 1; // 获取单个字符的高度
// 获取整个str用了font样式的宽度这里用四舍五入后+1保证宽度绝对能容纳这个字符串作为图片的宽度
int width = (int)Math.round(r.getWidth()) + 1;
int height = unitHeight + 3; // 把单个字符的高度+3保证高度绝对能容纳字符串作为图片的高度
// 创建图片
BufferedImage imageb = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g = imageb.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 反锯齿
g.setFont(font); // 设置画笔字体
g.drawString(str, 0, font.getSize()); // 画出字符串
g.dispose();
ImageIO.write(imageb, "png", outFile); // 输出png图片
}
}