Java 创建背景透明的文字图片、将文本写到图片上
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 创建背景透明的文字图片、将文本写到图片上相关推荐
- 【转】关于Java生成背景透明的png图片
http://www.cnblogs.com/dotjava/archive/2008/09/04/1283963.html 关于Java生成背景透明的png图片 最近用到Java动态生成背景透明的图 ...
- css如何实现背景透明,文字不透明?
之前做了个半透明弹层,但设置背景半透明时,子元素包含的字体及其它元素也都变成了半透明.对opacity这个属性认识的不透彻,在这里做一些总结,方便以后使用. 背景透明,文字不透明的解决方法: 为元素添 ...
- css如何实现背景透明,文字不透明
css如何实现背景透明,文字不透明? 之前做了个半透明弹层,但设置背景半透明时,子元素包含的字体及其它元素也都变成了半透明.对opacity这个属性认识的不透彻,在这里做一些总结,方便以后使用. 背景 ...
- 转载 - 背景透明,文字不透明【学习】
[ 以下方法,测试后,IE6下,背景并未透明,暂不知解决办法.]<!DOCTYPE html> <html> <head> <meta charset=&qu ...
- 最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础...
最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础,加油吧 距离去北京还有23天 转载于:https://www.cnblogs.com/AceIsSunsh ...
- VC设置CEdit控件背景透明、文字背景也透明
开发环境:VC6, a dialog based MFC application. 主界面: 为对话框添加WM_CTLCOLOR消息响应函数: HBRUSH CDDlg::OnCtlColor(CDC ...
- 背景透明,文字不透明效果
1 background-color: #24BA09; 2 color: #fff; 3 filter: alpha(opacity=80);/*为了实现ie8透明度*/ 4 zoom: 1;/*为 ...
- 标签背景透明以及文字重叠问题
当我们在窗口使用了非系统默认颜色或图片当背景时,上面的标签等控件实在是影响美观 这个问题,只要设置标签的背景为透明就可以解决,代码如下: HBRUSH CTransparentCtlDlg::OnCt ...
- css如何让背景透明,文字不透明
今天写个效果,想让背景透明,直接设置 opacity:0.4; 导致文字也模糊了,该属性因该是应用在整个盒子上的. 只需给背景单独添加透明度即可 background:rgba(204,204,204 ...
最新文章
- 使用 istringstream 遇到的一点小问题
- 简易的素描图片转换流程与实现
- JAVA学习(十)__MessageFormat用法
- 重磅!专硕学制改为三年,多所高校发文!
- VFP中轻松绑定 Windows 事件
- samba服务器查看文件共享,我的笔记Uuntu下Samba服务器共享文件夹在windows7 下查看.doc...
- ajax切换明星头像!
- 线程池及其实现文章一
- 左程云算法课基础06图课程笔记
- Photoshop基础照片美化
- 明日之后 服务器维护,明日之后服务器爆满炸服 排队等待进不去什么梗
- 容灾是什么意思?容灾基础知识介绍
- PD快充方案:极具性价比的苹果iphone12 PD20W快充方案来了!
- php生成小程序二维码出现40001的情况
- C语言编程四平方和定理,第四平方和定理,用c语言实现
- win7重装mysql_win7(64位)彻底卸载mysql,重装不再烦恼
- 花游双人、三级跳斩获金银
- extjs grid选择框默认全选_Extjs gridpanel 加入全选列
- 实例004 计算正方形的边长
- zheng 项目(一)之从 zheng-common 开始