案例1

package com;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;import javax.swing.JFrame;
import javax.swing.JPanel;public class Test2 {public static void main(String[] args){  DrawFrame frame = new DrawFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}/**A frame that contains a panel with drawings*/class DrawFrame extends JFrame{public DrawFrame(){setTitle("DrawTest");setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);// add panel to frameDrawPanel panel = new DrawPanel();panel.setBackground(Color.WHITE);setLocationRelativeTo(null);add(panel, BorderLayout.CENTER);}public static final int DEFAULT_WIDTH = 320;public static final int DEFAULT_HEIGHT = 340;  }/**A panel that displays rectangles and ellipses. */class DrawPanel extends JPanel{private String message = "公章测试有限公司";public void paintComponent(Graphics g){  super.paintComponent(g);Graphics2D g2 = (Graphics2D) g;g2.setColor(Color.RED);g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//绘制圆int radius = 150;Ellipse2D circle = new Ellipse2D.Double();circle.setFrameFromCenter(CENTERX, CENTERY, CENTERX + radius, CENTERY + radius);g2.draw(circle);//绘制中间的五角星Font starFont = new Font("宋体", Font.BOLD, 120);g2.setFont(starFont);g2.drawString("★", CENTERX - 60, CENTERY + 40);    //根据输入字符串得到字符数组String[] messages2 = message.split("",0);String[] messages = new String[messages2.length-1];System.arraycopy(messages2,1,messages,0,messages2.length-1);//输入的字数int ilength = messages.length;//设置字体属性int fontsize = 40;Font f = new Font("Serif", Font.BOLD, fontsize);FontRenderContext context = g2.getFontRenderContext();Rectangle2D bounds = f.getStringBounds(message, context);//字符宽度=字符串长度/字符数double char_interval = (bounds.getWidth() / ilength);//上坡度double ascent = -bounds.getY();int first = 0,second = 0;boolean odd = false;if (ilength%2 == 1){first = (ilength-1)/2;odd = true;}else{first = (ilength)/2-1;second = (ilength)/2;odd = false;}double radius2 = radius - ascent;double x0 = CENTERX;double y0 = CENTERY - radius + ascent;//旋转角度double a = 2*Math.asin(char_interval/(2*radius2));if (odd){g2.setFont(f);g2.drawString(messages[first], (float)(x0 - char_interval/2), (float)y0);//中心点的右边for (int i=first+1;i<ilength;i++){double aa = (i - first) * a;double ax = radius2 * Math.sin(aa);double ay = radius2 - radius2 * Math.cos(aa);AffineTransform transform = AffineTransform.getRotateInstance(aa);//,x0 + ax, y0 + ay);Font f2 = f.deriveFont(transform);g2.setFont(f2);g2.drawString(messages[i], (float)(x0 + ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay - char_interval/2* Math.sin(aa)));}//中心点的左边for (int i=first-1;i>-1;i--){double aa = (first - i) * a;double ax = radius2 * Math.sin(aa);double ay = radius2 - radius2 * Math.cos(aa);AffineTransform transform = AffineTransform.getRotateInstance(-aa);//,x0 + ax, y0 + ay);Font f2 = f.deriveFont(transform);g2.setFont(f2);g2.drawString(messages[i], (float)(x0 - ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay + char_interval/2* Math.sin(aa)));}}else{//中心点的右边for (int i=second;i<ilength;i++){double aa = (i - second + 0.5) * a;double ax = radius2 * Math.sin(aa);double ay = radius2 - radius2 * Math.cos(aa);AffineTransform transform = AffineTransform.getRotateInstance(aa);//,x0 + ax, y0 + ay);Font f2 = f.deriveFont(transform);g2.setFont(f2);g2.drawString(messages[i], (float)(x0 + ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay - char_interval/2* Math.sin(aa)));}//中心点的左边for (int i=first;i>-1;i--){double aa = (first - i + 0.5) * a;double ax = radius2 * Math.sin(aa);double ay = radius2 - radius2 * Math.cos(aa);AffineTransform transform = AffineTransform.getRotateInstance(-aa);//,x0 + ax, y0 + ay);Font f2 = f.deriveFont(transform);g2.setFont(f2);g2.drawString(messages[i], (float)(x0 - ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay + char_interval/2* Math.sin(aa)));}}}public static final int CENTERX = 150;public static final int CENTERY = 150;  }

案例2,生产图导出

package com.hwaggLee.swing.graphics2D;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Date;import javax.imageio.ImageIO;public class UtilsGraphics2D {private static final int WIDTH = 500;//图片宽度private static final int HEIGHT = 500;//图片高度private static String message = "公章测试有限公司";private static String centerName = "我是谁";private static String year = "2016年06月23日";public static void main(String[] args) throws Exception{BufferedImage image = startGraphics2D();try {String filePath = "C:\\Users\\huage\\Desktop\\121231\\"+new Date().getTime()+".png";ImageIO.write(image, "png", new File(filePath)); //将其保存在C:\\Users\\huage\\Desktop\\121231\\下} catch (Exception ex) {ex.printStackTrace();}}public static BufferedImage startGraphics2D(){  // 定义图像buffer         BufferedImage buffImg = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);         Graphics2D g = buffImg.createGraphics();      g.setColor(Color.RED);//设置锯齿圆滑
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//绘制圆int radius = HEIGHT/3;//周半径int CENTERX = WIDTH/2;//画图所出位置int CENTERY = HEIGHT/2;//画图所处位置
        Ellipse2D circle = new Ellipse2D.Double();circle.setFrameFromCenter(CENTERX, CENTERY, CENTERX + radius, CENTERY + radius);g.draw(circle);//绘制中间的五角星g.setFont(new Font("宋体", Font.BOLD, 120));g.drawString("★", CENTERX-(120/2), CENTERY+(120/3));    //添加姓名g.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 30));// 写入签名g.drawString(centerName, CENTERX -(40), CENTERY +(30+50));//添加年份g.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 20));// 写入签名g.drawString(year, CENTERX -(60), CENTERY +(30+80));//根据输入字符串得到字符数组String[] messages2 = message.split("",0);String[] messages = new String[messages2.length-1];System.arraycopy(messages2,1,messages,0,messages2.length-1);//输入的字数int ilength = messages.length;//设置字体属性int fontsize = 40;Font f = new Font("Serif", Font.BOLD, fontsize);FontRenderContext context = g.getFontRenderContext();Rectangle2D bounds = f.getStringBounds(message, context);//字符宽度=字符串长度/字符数double char_interval = (bounds.getWidth() / ilength);//上坡度double ascent = -bounds.getY();int first = 0,second = 0;boolean odd = false;if (ilength%2 == 1){first = (ilength-1)/2;odd = true;}else{first = (ilength)/2-1;second = (ilength)/2;odd = false;}double radius2 = radius - ascent;double x0 = CENTERX;double y0 = CENTERY - radius + ascent;//旋转角度double a = 2*Math.asin(char_interval/(2*radius2));if (odd){g.setFont(f);g.drawString(messages[first], (float)(x0 - char_interval/2), (float)y0);//中心点的右边for (int i=first+1;i<ilength;i++){double aa = (i - first) * a;double ax = radius2 * Math.sin(aa);double ay = radius2 - radius2 * Math.cos(aa);AffineTransform transform = AffineTransform.getRotateInstance(aa);//,x0 + ax, y0 + ay);Font f2 = f.deriveFont(transform);g.setFont(f2);g.drawString(messages[i], (float)(x0 + ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay - char_interval/2* Math.sin(aa)));}//中心点的左边for (int i=first-1;i>-1;i--){double aa = (first - i) * a;double ax = radius2 * Math.sin(aa);double ay = radius2 - radius2 * Math.cos(aa);AffineTransform transform = AffineTransform.getRotateInstance(-aa);//,x0 + ax, y0 + ay);Font f2 = f.deriveFont(transform);g.setFont(f2);g.drawString(messages[i], (float)(x0 - ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay + char_interval/2* Math.sin(aa)));}}else{//中心点的右边for (int i=second;i<ilength;i++){double aa = (i - second + 0.5) * a;double ax = radius2 * Math.sin(aa);double ay = radius2 - radius2 * Math.cos(aa);AffineTransform transform = AffineTransform.getRotateInstance(aa);//,x0 + ax, y0 + ay);Font f2 = f.deriveFont(transform);g.setFont(f2);g.drawString(messages[i], (float)(x0 + ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay - char_interval/2* Math.sin(aa)));}//中心点的左边for (int i=first;i>-1;i--){double aa = (first - i + 0.5) * a;double ax = radius2 * Math.sin(aa);double ay = radius2 - radius2 * Math.cos(aa);AffineTransform transform = AffineTransform.getRotateInstance(-aa);//,x0 + ax, y0 + ay);Font f2 = f.deriveFont(transform);g.setFont(f2);g.drawString(messages[i], (float)(x0 - ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay + char_interval/2* Math.sin(aa)));}}return buffImg;}
}

转载于:https://www.cnblogs.com/hwaggLee/p/5607262.html

java-生成印章swing相关推荐

  1. java 生成印章源码_java代码生成指定的公章和私章,并且解决服务器不能回显文字的问题...

    因项目需求所需,需要用java根据字段生成公章,在这里特别感谢大佬们贡献的代码,由衷的表示感谢,我充分发挥了搬砖的作用,因为在中间遇到了服务器上没有字的问题,故写下次文章,作为记录,希望能帮助到童鞋们 ...

  2. java 生成印章 图章

    1.下面几个工具用到了lombok,最好整合下,否则需要修改下 <dependency><groupId>org.projectlombok</groupId>&l ...

  3. Java生成印章图片

    /**      * 生成图片      *       * @return      * @throws Exception      */     public static String gra ...

  4. java实现生成印章

    一.项目简介 今天推荐一个非常实用的工具,但是不推荐大家真的去使用哈. 印章生成工具,当然用excel也能生成印章 二.实现功能 当然是生成印章了啊 三.技术选型 后台开发:Java 前端开发:无 数 ...

  5. java生成可执行文件的方法总结

    第一种:在jbuilder中:     首先你要保证Run菜单-->Run     Project能顺利运行     然后Wizards菜单-->Native     Executable ...

  6. 基于java+mysql的Swing+MySQL物业收费系统(java+gui+文档)

    基于java+mysql的Swing+MySQL物业收费系统(java+gui+文档) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可 ...

  7. java生成文字二维码、url二维码

    java生成文字二维码.url二维码 pom: 1)生成文字二维码 java工具类: 2)url地址生成二维码 java工具类: pom: <dependency><groupId& ...

  8. Java生成PDF文件,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...

  9. java生成随机数组_JAVA生成随机数组10个数字并求和

    JAVA生成随机数组10个数字并求和 本文最终结果大概是这样的',使用java技术随机生成10个数,然后填充一个数组并在消息框中显示数组内容,接着对数组求和输出,将结果显示在消息框中. 设计思路:可以 ...

  10. java生成缩略图类源码

    把做工程过程比较好的一些内容备份一下,如下内容段是关于 java生成缩略图类的内容. package com.whatycms.common.util; import java.awt.image.B ...

最新文章

  1. 独家 | 5大冠军出炉!李开复的AI挑战赛,冠军们聊到了这么些感受
  2. STP:五种端口状态与角色 RSTP:3种端口状态与角色
  3. oracle 查询各科前3名_2020年山东高校排行榜前3无悬念,山东理工大学省内第17全国250名...
  4. mysql5.2 软件园_MySQL Server V5.5 官方安装版
  5. 从系统中取得指定资源图像(转载)
  6. 【原创】OllyDBG 入门系列(一)-认识OllyDBG
  7. ai的弹窗点了都不响应_怎么吃都不胖?这8点增重看了就能跟着做
  8. 413.等差数列划分
  9. 关于Linux系统之VM安装配置(每一个步骤都超级详细的哦!)
  10. nuget 下载nupkg 以及依赖包
  11. jdk8下载与安装教程
  12. 【Robo 3T】MongoDB可视化工具-- Robo 3T使用教程
  13. 远程桌面连接:系统管理员已限制你登录的计算机处理方法
  14. 量子计算机生命,量子计算机上量子人工生命模型 - 酷酷UFO
  15. 什么是响应式布局?原理是什么?
  16. charles对iOS手机的https进行抓包(图文教程)
  17. Mathcad求解一元二次方程
  18. MongoDB-python操作mongodb
  19. 如何清除博客中广告内容
  20. AJAX之三种数据传输格式详解

热门文章

  1. VS2010中VAssistX破解办法
  2. 网站301跳转问题的探讨和用法,网站做301跳转的相关问题
  3. 陈年:追随PPG 直销衬衫拒绝烧钱
  4. 【uni-app项目】瑞幸咖啡小程序
  5. python获取时间戳字符串
  6. Redis笔记-基础篇(黑马视频教程)
  7. 微信小程序个人中心页与登录界面的切换
  8. Cesium 获取当前视图的中心经纬度
  9. 三种方法教你让模糊照片秒变高清图
  10. MATLAB 符号表达式与运算全面详细讲解