# java.awt 画矩形踩坑

本来使用Graphics2D的drawRect()方法画图的,但是出现了下边框过粗,不得已 使用了画线的方法,四个边框,单独划线,

这里要注意坐标轴和线的宽度--高度height

一下是代码

/*** 创建私人章的方法* @param drawStrName  输入的姓名 1- 18 位* @param filePathAndFileName E:\test2\grp.png* @param drawStrSpecial -- CN310110HAJ403CFD383*/public static void createPersonalSeal(String drawStrName,String filePathAndFileName,String drawStrSpecial) {String drawStrSecondLine ="";String drawStrFirstLine ="";int length = drawStrName.length();Map<Integer,SignImage.Params> weidthHeightMap = getWeidthHeight(length);Params params = weidthHeightMap.get(length);int width = params.getWidth() *2;int height = params.getHeight() *2;int fontHeight = 12 * 2;int fontHeightSpecial = 12;int frameLineWhiteSize = 8;int newWidth = width;int newHeight =  height + frameLineWhiteSize + fontHeightSpecial;int frameLineSize = 5;BufferedImage buffImg = new BufferedImage(newWidth, newHeight , BufferedImage.TYPE_INT_RGB);Graphics2D gd = buffImg.createGraphics();//设置透明  startbuffImg = gd.getDeviceConfiguration().createCompatibleImage(newWidth, newHeight, Transparency.TRANSLUCENT);gd = buffImg.createGraphics();//设置透明  end//设置字体Font fontSong = new Font("宋体", Font.BOLD, fontHeight);gd.setFont(fontSong);//类对象,可以获得某个字体的高度,以及字符串的宽度FontMetrics fmSong = gd.getFontMetrics(fontSong);Stroke oldStroke = gd.getStroke();//设置颜色//设置线宽为5.0gd.setStroke(new BasicStroke(5.0f));//画边框
//        gd.drawRect(0, 0, width - 1 , height - fontHeightSpecial -8);// 画一个矩形gd.fillRect(0, 0, newWidth, newHeight);// 去除锯齿(当设置的字体过大的时候,会出现锯齿)gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);gd.setColor(Color.black);gd.fillRect(0, 0, frameLineSize, height);gd.fillRect(0, 0, width , frameLineSize);gd.fillRect(0, height , width, frameLineSize);gd.fillRect(width - frameLineSize, 0, width, height);int songFontwidthFirst = 0;int songFontwidthSecond = 0;int arialFontheightFirst = 0;int arialFontheightSecond = 0;boolean largeFlag = length >3;if(largeFlag){int subStartLength = length % 2;if(subStartLength ==1){subStartLength = (length -1)/2;}else{subStartLength = length / 2;}drawStrFirstLine = drawStrName.substring(0,subStartLength);drawStrSecondLine = drawStrName.substring(subStartLength,length);songFontwidthFirst = fmSong.stringWidth(drawStrFirstLine);songFontwidthSecond = fmSong.stringWidth(drawStrSecondLine);arialFontheightFirst = fmSong.getHeight();arialFontheightSecond = fmSong.getHeight();}else{drawStrFirstLine = drawStrName;songFontwidthFirst = fmSong.stringWidth(drawStrFirstLine);arialFontheightFirst = fmSong.getHeight();}if(largeFlag){//先画第一行,输出文字(中文横向居中)gd.drawString(drawStrFirstLine, (width - songFontwidthFirst) /2,(newHeight - arialFontheightFirst *2   -frameLineSize)/2 + 10);//画第二行,输出文字(中文横向居中)gd.drawString(drawStrSecondLine, (width - songFontwidthSecond) /2,(newHeight - arialFontheightFirst *2  - frameLineSize )/2 + arialFontheightFirst + 20);}else{gd.drawString(drawStrFirstLine, (width - songFontwidthFirst) /2, newHeight /2 );}Font arialFont = new Font("Arial", 2, fontHeightSpecial);gd.setFont(arialFont);//类对象,可以获得某个字体的高度,以及字符串的宽度FontMetrics fm = gd.getFontMetrics(arialFont);int arialFontwidth = fm.stringWidth(drawStrSpecial);gd.setColor(Color.BLACK);gd.drawString(drawStrSpecial, (width - arialFontwidth) /2,  newHeight);// 透明度设置结束gd.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));gd.dispose();try {ImageIO.write(buffImg, "png", new File(filePathAndFileName));} catch (IOException e) {e.printStackTrace();}buffImg.flush();}public static Map<Integer,SignImage.Params> getWeidthHeight(int length){int width =0;int height = 0;switch (length){case 1:width = 93;height = 44 ;break;case 2:width = 93;height = 44 ;break;case 3:width = 93;height = 44 ;break;case 4:width = 93;height = 44 ;break;case 5:width = 93;height = 44 ;break;case 6:width = 93;height = 44 ;break;case 7:width = 107;height = 50;break;case 8:width = 107;height = 50;break;case 9:width = 119;height = 50;break;case 10:width = 119;height = 50;break;case 11:width = 136;height = 58;break;case 12:width = 136;height = 58;break;case 13:width = 136;height = 58;break;case 14:width = 136;height = 58;break;case 15:width = 136;height = 58;break;case 16:width = 136;height = 58;break;case 17:width = 136;height = 58;break;case 18:width = 136;height = 58;break;default: throw new RuntimeException("姓名字数不符合要求");}Map<Integer,SignImage.Params> reParentMap = com.google.common.collect.Maps.newHashMap();SignImage.Params returnParams = new SignImage.Params();returnParams.setHeight(height);returnParams.setWidth(width);reParentMap.put(length,returnParams);return reParentMap;}@Data@NoArgsConstructor@AllArgsConstructor@ToString@Builder@Accessors(chain = true)@EqualsAndHashCodestatic class Params {int width;int height;}public static void main(String[] args) {SignImage.createPersonalSeal("张大牛","E:\\test2\\grp.png","CN310110HAJ403CFD383");}

一下为参考的资源;

    private static void transparent() throws IOException {int width = 400;int height = 300;
// 创建BufferedImage对象BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取Graphics2DGraphics2D g2d = image.createGraphics();// ----------  增加下面的代码使得背景透明  -----------------
//        image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
//        g2d.dispose();
//        g2d = image.createGraphics();
// ----------  背景透明代码结束  -----------------
//        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,0.5f));// 画一个矩形g2d.fillRect(0, 0, width, height);// 去除锯齿(当设置的字体过大的时候,会出现锯齿)g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);Color color = new Color(255, 0, 0);g2d.setColor(color);g2d.fillRect(0, 0, 8, height);g2d.fillRect(0, 0, width, 8);g2d.fillRect(0, height - 8, width, height);g2d.fillRect(width - 8, 0, width, height);
// 画图g2d.setColor(new Color(255, 0, 0));g2d.setStroke(new BasicStroke(10));g2d.drawString("name", 100, 100);
//释放对象g2d.dispose();BufferedImage bufferedImage = alphaProcess(image);
// 保存文件ImageIO.write(bufferedImage, "png", new File("d:/test/test.png"));bufferedImage.flush();}

java.awt.Graphics2D 生成图片--个人章的方法相关推荐

  1. java.awt.Graphics2D绘制流程图基本元素

    java.lang.Object ----java.awt.Graphics ----java.awt.Graphics2D 由于项目需要,要求对用户流程进行图形化展示:用户对自己的操作通过查看流程图 ...

  2. java graphics2d 矩形_使用java.awt.Graphics2D画矩形

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.awt.Graphics; import java.awt.Gra ...

  3. Java核心技术卷一 -第四章:方法参数

    系列文章目录 Java核心技术卷一 -第一章:java"白皮书"的关键术语 Java核心技术卷一 -第三章:数据类型 Java核心技术卷一 -第三章:变量与常量 Java核心技术卷 ...

  4. java抗锯齿_java.awt.Graphics2D抗锯齿(字体平滑)处理

    由于项目要在图片中动态加入文字,没想到字体有毛边,找了N多文章没找到解决方法,最后用英文关键字在google上找到了,唉,为什么大家对这些都不关心呢? Java 2D - smooth text fo ...

  5. java图片叠加_[原创]JAVA中图片上叠加文字的方法

    --sunfruit JDK:1.3.x以上 功能:下面是一个简单在图片上面叠加文字的方法,有朋友如果有这方面的问题,就起个了解的作用 代码如下: import java.io.IOException ...

  6. java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解

    文章目录 前言 一.直接上代码 1. 写字方法 2. 换行算法 二. 叙述换行算法 前言 代码都上传到GitHub了,这里仅仅是贴出来主要部分,GitHub传送门:https://github.com ...

  7. java图片处理,自己踩过的那些坑。java.awt的学习笔记!!!

    序言 大学毕设做的是 游戏-QQ机器人查询工具,选择的国外super cell的游戏COC(也是因为国内的游戏生态不提供API接口,一般都被鹅厂.猪场"独裁"了,甚至super c ...

  8. java使用Graphics2D进行图片文字合成示例

    功能介绍:通过Graphics2D在一张背景图上添加文字描述和图片. 合成效果示意图: 代码示例: 在代码中对每步操作做了详细的注释 import java.awt.Color; import jav ...

  9. java basicstroke_使用java.awt.BasicStroke动画化虚线

    使用虚线,线程(或Swing Timer)&将它们与repaint()结合起来,并对破折号的起点和终点进行一些调整 – 然后就可以了. 例 package test; import java. ...

最新文章

  1. Java面试题基础知识(收集)
  2. Java 使用匿名内部类在方法内部定义并启动线程
  3. mac下安装nginx
  4. onSaveInstanceState和onRestoreInstanceState触发的时机
  5. 201671010144 2016-2017-2 《java程序设计》--认识java!
  6. 通俗解释协方差与相关系数
  7. Java之强引用、 软引用、 弱引用、虚引用
  8. 前端学习(619):变量的小案例二
  9. rails kaminari bootstrap-kaminari-views
  10. 神奇的css之 -webkit-background-clip: text; 五彩斑斓的文字效果
  11. [编译原理随记]正则表达式转为NFA状态图(Thompsion构造法)
  12. 首席新媒体商学院黎想:全新的抖音涨粉攻略
  13. $q -- AngularJS中的服务
  14. PHP函数array_intersect
  15. Python计算机视觉编程第三章——图像到图像的映射
  16. oracle ebs r12 打补丁的步骤
  17. Matlab设置天线增益,怎么把天线的增益图画成这个样子
  18. java读取身份证信息
  19. 护眼灯到底有没有用?盘点护眼灯的用处
  20. Subroutine 子程序 Perl 第四章

热门文章

  1. HDU4367(线段相交与斐波那契数列)
  2. nth_element
  3. “白加黑”远控木马技术分析及手杀方案
  4. 网卡MAC地址相关信息大全
  5. 如果世界上只有一种数据结构,那么我选择 hash
  6. 字节,腾讯,百度... Go 工程师面试题大公开
  7. 二叉树和栈的基本操作
  8. 音视频技术开发周刊 | 224
  9. 音视频领域或将开启”外卷“之路
  10. 【线上分享】音频多麦盲分技术