我們都看到過一些網(wǎng)站上注冊的新用戶頭像都是昵稱的第一個(gè)字生成的圖片摆寄。一下代碼就是模擬這個(gè)圖片的捣鲸。
/**
* 創(chuàng)建頭像
* @param drawString 要畫的文字
* @param width 圖片寬度
* @param height 圖片高度
* @param fontSize 字體大邢夷簟(磅)
* @return
*/
public static InputStream createHeadPortrait( String drawString, String formatName,int width,int height,int fontSize){
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) buffImg.getGraphics();
//消除文字鋸齒
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
//消除畫圖鋸齒
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_DEFAULT);
g.setColor(Color.orange);
g.fillRect(0, 0, width, height);
// 創(chuàng)建字體,字體的大小應(yīng)該根據(jù)圖片的高度來定孵户。
Font font = new Font("楷體", Font.CENTER_BASELINE, fontSize);
//字體的大小信息
FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
//文字寬
int fontWidth = metrics.stringWidth(drawString);
//文字的高
int fontHeight = metrics.getHeight();
//基線(baseline)到該字體中大多數(shù)字符的升部(ascender)之間的距離
int ascent = metrics.getAscent();
g.setFont(font);
g.setColor(Color.white);
//drawString的坐標(biāo)指的是文字左下角的坐標(biāo)
g.drawString(drawString, width/2-fontWidth/2, height/2-fontHeight/2+ascent);
ImageIO.write(buffImg, formatName, os);
InputStream inputStream = new ByteArrayInputStream(os.toByteArray());
return inputStream;
} catch (Exception e) {
logger.error("生成頭像異常,e={}", e);
}finally {
try {
os.close();
} catch (IOException e) {
logger.error("os流關(guān)閉異常");
}
}
return null;
}