本来这不是一个特别难的问题 但是刚开始的时候一直就想通过纯的代码实现 而不借助于水印 花了有一天的时间 这的确不应该 但是从中我们也可以认识到 对于代码 千万不能钻牛角尖 正所谓 跳跳大道公罗马 不多说 下面写代码 给需要的朋友一些帮助

 /*** 输出图片的公用方法* * @param message*            弧度上的字 (基本都是从数据库读取)* @param centerName*            中间要显示的名字* @param width*            中间字体的宽度* @param height*            中间字体的高度* @return* @throws FileNotFoundException* @throws IOException*/public static BufferedImage bufferedImageUtil(String message,String centerName, int width, int height)throws FileNotFoundException, IOException {BufferedImage image = null;if (message != null) {final int CENTERX = 90;final int CENTERY = 90;final int radius = 76;// 获取get_png文件夹ActionContext ac = ActionContext.getContext();ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT);String filePath = sc.getRealPath(File.separator + "style"+ File.separator + "imgs");String path = filePath;image = ImageIO.read(new FileInputStream(path + File.separator+ "newIcon.jpg"));Graphics2D g2 = image.createGraphics();// 得到图形上下文g2.setColor(Color.RED); // 设置画笔颜色// 设置字体g2.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 15));// 写入签名if (centerName != null) {g2.drawString(centerName, width, height);}// 根据输入字符串得到字符数组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 = 16;Font f = new Font("", 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)));}}g2.dispose();}return image;}---------------------------------上述为圆形带五角星的章-------------------------/*** 方形名字章* * @param message*            要刻的名字* @return* @throws FileNotFoundException* @throws IOException*/public static BufferedImage getSquarePng(String message)throws FileNotFoundException, IOException {BufferedImage image = null;if (message != null) {ActionContext ac = ActionContext.getContext();ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT);String filePath = sc.getRealPath(File.separator + "style"+ File.separator + "imgs");String path = filePath;image = ImageIO.read(new FileInputStream(path + File.separator+ "squarePng.png"));Graphics2D g2 = image.createGraphics();// 得到图形上下文g2.setColor(Color.RED); // 设置画笔颜色// 设置字体g2.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 80));// 写入签名if (message != null) {String newMessage = null;// 如果三个 则 XXX章 如果两个则 XX之章 大于3个 则 取前三if (message.length() == 2) {newMessage = message + "之章";} else if (message.length() == 3) {newMessage = message + "章";} else if (message.length() > 3) {newMessage = message.substring(0, 3) + "章";}char[] charArray = newMessage.toCharArray();g2.drawString(new String(new char[] { charArray[0] }), 90, 70);  // 写文字g2.drawString(new String(new char[] { charArray[1] }), 90, 160); // 写文字g2.drawString(new String(new char[] { charArray[2] }), 10, 70);  // 写文字g2.drawString(new String(new char[] { charArray[3] }), 10, 160); // 写文字}}return image;}---------------------------------方形章------------------------------------------------------------------------调用方法------------------------------------/*** 获取方形印章* * @return*/public String getSquarePngByUserName() {String info = null;BufferedImage image = null;try {ActionContext ac = ActionContext.getContext();HttpServletResponse response = (HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE);response.setContentType("image/JPEG");OutputStream output = response.getOutputStream();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);Users user = (Users) SiteAction.getEntity("loginUser");if (user != null) {String userName = user.getUName();if (userName != null) {image = OutPicture.getSquarePng(userName);}}if (image != null) {encoder.encode(image);}output.flush();output.close();} catch (Exception e) {return ERROR;}return info;}// 工商行政管理局(圆形))public String noticeOfRegistrationPng() {String info = null;try {ActionContext ac = ActionContext.getContext();HttpServletResponse response = (HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE);response.setContentType("image/JPEG");OutputStream output = response.getOutputStream();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);BufferedImage image = OutPicture.bufferedImageUtil("工商行政管理局", null,48, 150);if (image != null) {encoder.encode(image);}output.flush();output.close();} catch (Exception e) {info = Action.ERROR;}return info;}

--------------------------------效果--------------------------------

用Java实现支持圆形带五角星 方形电子印章相关推荐

  1. java 印章 方_用Java实现支持圆形带五角星 方形电子印章

    /** * 输出图片的公用方法 * * @param message * 弧度上的字 (基本都是从数据库读取) * @param centerName * 中间要显示的名字 * @param widt ...

  2. 史上最全Java面试题(带全部答案)

    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次.对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦.在跳槽季来临之前,特地做这 ...

  3. Java面试题大全带答案 110道(持续更新)

    本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案 如果不背 ...

  4. 在Unix/Linux上令(java)JVM支持中文输出

    在Unix/Linux上令(java)JVM支持中文输出 一.在Unix/Linux上令JVM支持中文输出 如 果用户使用的是UNIX的远程服务器,就会遇到中文字体在图像中输出的问题,特别是由于许多管 ...

  5. java不支持发行版本12_主要发行版本后Java开发人员应使用的15种工具

    java不支持发行版本12 新部署的生存工具包:适用于Java开发人员的工具,这些工具经常将代码部署到生产中! Takipi会检测生产中的所有错误,并像发生错误时一样显示变量值 立即部署并获得免费的T ...

  6. 为什么Java开发人员都带眼镜 | 程序员搞笑段子合集

    Enjoy! 01 如何区分HTML和HTML5? 用IE打开,打不开吗?那就是HTML5没错了. 02 程序员为什么放弃斗争呢? 因为他没有兵(array)啊. 03 数据库SQL走进了一家NoSQ ...

  7. Java面试题大全带答案110道(持续更新)

    [Java面试题大全带答案 110道(持续更新)] 本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题 ...

  8. Java面试题大全带答案 40道

    本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案 如果不背 ...

  9. Java经典面试题 带答案(五)

    Java经典面试题 带答案(五) Java 面试笔试题汇总 一.编程语言(Java)-2 二.软件工程方面-9 三.智力测试-9 四.数据库-12 五.Java框架方面 -14 六.XML方面-17 ...

最新文章

  1. python后端开发框架加密_Flask框架实现的前端RSA加密与后端Python解密功能详解
  2. 曾宝仪和机器人_你愿意和机器人成为终身伴侣吗?
  3. 大数据WEB阶段(六)MySql 下载、安装、卸载与配置
  4. Xcode12快捷键配置
  5. linux磁盘管理的命令行,Linux磁盘管理命令介绍
  6. 如何学好Spring
  7. Spring Boot Executable jar/war 原理
  8. 记号的认识、公式的理解
  9. 用于企业服务总线的类 USB 通用端口类型,第 1 部分: 当前 ESB 存在的问题
  10. JDK11无法启动VisualVM
  11. Log4j配置使用的简单教程
  12. 也许你需要看看这篇文章
  13. 425 Failed to establish connection.
  14. malloc、calloc、realloc
  15. 【国科大矩阵论】2021秋季叶世伟矩阵论考试计算题
  16. Java 工作2年后需要达到怎么样的技术水平
  17. python+matplotlib绘图线条类型、颜色、散点类型
  18. 6-5图-图的基本操作
  19. MATLAB应用——曲线长度的求解
  20. 复无法自动修复此计算机,win10自动修复而且无法重置

热门文章

  1. centos卸载不必要的程序_centos 卸载软件·
  2. j2se、j2ee、j2me、jse、jee及jme的区别
  3. ubuntu----VMware 鼠标自由切换问题及主机虚拟机共享剪切板问题
  4. wps怎么调出左侧目录_wps怎么显示左侧目录树
  5. 独立展馆 stand-alone pavilion
  6. 关于SQL92与SQL99语法的区别与PK
  7. 《基于机器视觉的旅游景点英语公共标志提取与翻译研究》论文笔记
  8. gitlab合并分支代码
  9. SQLServer常用简单语句及举例
  10. Ansible(1) Centos7安装Ansible