Java 创建背景透明的文字图片、将文本写到图片上:

import sun.font.FontDesignMetrics;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.font.LineMetrics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class Img {/*** 导入本地图片到缓冲区*/private static BufferedImage loadImageLocal(String imgName) {try {return ImageIO.read(new File(imgName));} catch (IOException e) {System.out.println(e.getMessage());}return null;}/*** 创建背景透明的文字图片** @param str       文本字符串* @param width     图片宽度* @param height    图片高度* @param font      设置字体* @param fontColor 字体颜色* @param alpha     文字透明度,值从0.0f-1.0f,依次变得不透明*/private static BufferedImage createImageWithText(String str, int width, int height, Font font, Color fontColor, float alpha) {BufferedImage textImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = textImage.createGraphics();//设置背景透明textImage = g2.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);g2.dispose();g2 = textImage.createGraphics();//开启文字抗锯齿g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);//设置字体g2.setFont(font);//设置字体颜色g2.setColor(fontColor);//设置透明度:1.0f为透明度 ,值从0-1.0,依次变得不透明g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));//计算字体位置:上下左右居中FontRenderContext context = g2.getFontRenderContext();LineMetrics lineMetrics = font.getLineMetrics(str, context);FontMetrics fontMetrics = FontDesignMetrics.getMetrics(font);float offset = (width - fontMetrics.stringWidth(str)) / 2;float y = (height + lineMetrics.getAscent() - lineMetrics.getDescent() - lineMetrics.getLeading()) / 2;//绘图g2.drawString(str, (int) offset, (int) y);//释放资源g2.dispose();return textImage;}private static void createImageWithText(String destImgPath, String imgType, String str, int width, int height, Font font, Color fontColor, float alpha) {BufferedImage image = Img.createImageWithText(str, width, height, font, fontColor, alpha);try {ImageIO.write(image, imgType, new File(destImgPath));} catch (IOException e) {e.printStackTrace();}}/*** 将文本写到图片上** @param srcImgPath  源图片路径* @param destImgPath 处理结果图片路径* @param imgType     图片格式:png,jpg等* @param text        文本字符串* @param font        字体* @param fontColor   字体颜色:Color.RED等*/private static boolean writeTextOnImage(String srcImgPath, String destImgPath, String imgType, String text, Font font, Color fontColor) {BufferedImage image = Img.loadImageLocal(srcImgPath);int width = image.getWidth();int height = image.getHeight();Graphics2D g2 = image.createGraphics();//开启文字抗锯齿g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);//设置字体g2.setFont(font);//设置字体颜色g2.setColor(fontColor);//设置透明度:1.0f为透明度 ,值从0-1.0,依次变得不透明//g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));//计算字体位置:上下左右居中FontRenderContext context = g2.getFontRenderContext();LineMetrics lineMetrics = font.getLineMetrics(text, context);FontMetrics fontMetrics = FontDesignMetrics.getMetrics(font);float offset = (width - fontMetrics.stringWidth(text)) / 2;float y = (height + lineMetrics.getAscent() - lineMetrics.getDescent() - lineMetrics.getLeading()) / 2;//绘图g2.drawString(text, (int) offset, (int) y);//释放资源g2.dispose();//写入文件boolean ret = false;try {ret = ImageIO.write(image, imgType, new File(destImgPath));} catch (IOException e) {e.printStackTrace();}return ret;}public static void main(String[] args) {String imgPath1 = "images/green.png";Font font = new Font("fonts/MSYH.TTF", Font.BOLD, 80);String destPath = "images/pic.gif";Img.createImageWithText(destPath, "gif", "认真的头像", 500, 500, font, Color.BLACK, 1.0f);String destPath3 = "images/pic31.png";Img.writeTextOnImage(imgPath1, destPath3, "png", "aaAA123", font, Color.RED);}
}

效果图:



Java 创建背景透明的文字图片、将文本写到图片上相关推荐

  1. 【转】关于Java生成背景透明的png图片

    http://www.cnblogs.com/dotjava/archive/2008/09/04/1283963.html 关于Java生成背景透明的png图片 最近用到Java动态生成背景透明的图 ...

  2. css如何实现背景透明,文字不透明?

    之前做了个半透明弹层,但设置背景半透明时,子元素包含的字体及其它元素也都变成了半透明.对opacity这个属性认识的不透彻,在这里做一些总结,方便以后使用. 背景透明,文字不透明的解决方法: 为元素添 ...

  3. css如何实现背景透明,文字不透明

    css如何实现背景透明,文字不透明? 之前做了个半透明弹层,但设置背景半透明时,子元素包含的字体及其它元素也都变成了半透明.对opacity这个属性认识的不透彻,在这里做一些总结,方便以后使用. 背景 ...

  4. 转载 - 背景透明,文字不透明【学习】

    [ 以下方法,测试后,IE6下,背景并未透明,暂不知解决办法.]<!DOCTYPE html> <html> <head> <meta charset=&qu ...

  5. 最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础...

    最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础,加油吧 距离去北京还有23天 转载于:https://www.cnblogs.com/AceIsSunsh ...

  6. VC设置CEdit控件背景透明、文字背景也透明

    开发环境:VC6, a dialog based MFC application. 主界面: 为对话框添加WM_CTLCOLOR消息响应函数: HBRUSH CDDlg::OnCtlColor(CDC ...

  7. 背景透明,文字不透明效果

    1 background-color: #24BA09; 2 color: #fff; 3 filter: alpha(opacity=80);/*为了实现ie8透明度*/ 4 zoom: 1;/*为 ...

  8. 标签背景透明以及文字重叠问题

    当我们在窗口使用了非系统默认颜色或图片当背景时,上面的标签等控件实在是影响美观 这个问题,只要设置标签的背景为透明就可以解决,代码如下: HBRUSH CTransparentCtlDlg::OnCt ...

  9. css如何让背景透明,文字不透明

    今天写个效果,想让背景透明,直接设置 opacity:0.4; 导致文字也模糊了,该属性因该是应用在整个盒子上的. 只需给背景单独添加透明度即可 background:rgba(204,204,204 ...

最新文章

  1. 使用 istringstream 遇到的一点小问题
  2. 简易的素描图片转换流程与实现
  3. JAVA学习(十)__MessageFormat用法
  4. 重磅!专硕学制改为三年,多所高校发文!
  5. VFP中轻松绑定 Windows 事件
  6. samba服务器查看文件共享,我的笔记Uuntu下Samba服务器共享文件夹在windows7 下查看.doc...
  7. ajax切换明星头像!
  8. 线程池及其实现文章一
  9. 左程云算法课基础06图课程笔记
  10. Photoshop基础照片美化
  11. 明日之后 服务器维护,明日之后服务器爆满炸服 排队等待进不去什么梗
  12. 容灾是什么意思?容灾基础知识介绍
  13. PD快充方案:极具性价比的苹果iphone12 PD20W快充方案来了!
  14. php生成小程序二维码出现40001的情况
  15. C语言编程四平方和定理,第四平方和定理,用c语言实现
  16. win7重装mysql_win7(64位)彻底卸载mysql,重装不再烦恼
  17. 花游双人、三级跳斩获金银
  18. extjs grid选择框默认全选_Extjs gridpanel 加入全选列
  19. 实例004 计算正方形的边长
  20. zheng 项目(一)之从 zheng-common 开始

热门文章

  1. 绘制思维导图简单的方法是什么?思维导图绘制的作用又是什么
  2. switch-case
  3. KNN算法原理详解及python代码实现
  4. 支持html5直播平台,虎牙掀起技术革命,成国内首家支持H5的直播平台
  5. 五大浏览器内核及并发数
  6. c语言老鼠迷宫程序,C语言经典算法——老鼠走迷宫(二)
  7. 人鱼小姐主题曲我痛苦的爱铃声 人鱼小姐主题曲我痛苦的爱手机...
  8. 非常有创意 | Excel制作漂亮的切换式销售统计表
  9. ASCII码与16进制的互相转换(图表)
  10. 腾讯QQ:异地登陆也被封号,你们是怎么决策的???