- 浏览: 179510 次
- 性别:
- 来自: 北京
最新评论
-
u011374223:
获取颜色的方法有两个,07xssfWORKBOOK的需要用这个 ...
apache poi读取excel中的颜色,真是坑爹啊 -
zhangtcb:
读取的颜色和Excel中的不一样啊
apache poi读取excel中的颜色,真是坑爹啊 -
LD_21:
...
log4j日志文件的相对路径 -
xfxlch:
upThx
来,让我们一起画个印章吧 -
xinxinlong:
单元格的style里面有个颜色,如果双击单元格,里面的文字选中 ...
apache poi读取excel中的颜色,真是坑爹啊
这几天发现有哥们在介绍如何画出swing,正好我也受命做一个简单的印章.今天完工,抽出来一个典型的凑下热闹,让大家乐呵乐呵.
还是老习惯,不多说,上代码和图片.
主类:
package i2534.iteye.com; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Polygon; import java.awt.Stroke; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.imageio.ImageIO; /** * 印章类.保存印章必须的参数和绘制方法. * * @author i2534 * */ public class Seal { /** * 印章名称距中心点偏移量,按照y轴方向 */ private int nameOffset = 50; /** * 印章宽度 */ private int width = 230; /** * 印章高度 */ private int height = 230; /** * 印章中心标志(默认为五角星)外接圆半径 */ private float radius = 30; /** * 印章所属单位的起始角度,以6点钟方向为中心,向两个方向平均扩展 */ private float firmAngle = 120; /** * 印章名称 */ private String name = "取钱专用章"; /** * 印章名称颜色 */ private Color nameColor = Color.RED; /** * 印章所属单位 */ private String firm = "中国人民银行"; /** * 印章所属单位颜色 */ private Color firmColor = Color.RED; /** * 印章名称字体信息 */ private Font nameFont = new Font("宋体", Font.PLAIN, 16); /** * 印章所属单位字体信息 */ private Font firmFont = new Font("宋体", Font.PLAIN, 24); /** * 单位字体的宽度缩放比率(百分比).此参数可以使字体看起来瘦长 */ private float firmScale = 1.0F; /** * 边框线宽 */ private float borderWidth = 5F; /** * 边框颜色 */ private Color borderColor = Color.RED; /** * 印章标记(默认为五角星)线宽 */ private float signBorderWidth = 3F; /** * 印章标记颜色 */ private Color signBorderColor = Color.RED; /** * 印章标记填充颜色 */ private Color signFillColor = Color.RED; public void draw(Graphics2D g2d) { // 把绘制起点挪到圆中心点 g2d.translate(width / 2, height / 2); Stroke stroke = g2d.getStroke();// 旧的线性 // 填充五角星 Polygon polygon = getPentaclePoints(radius); if (signFillColor != null) { g2d.setColor(signFillColor); g2d.fill(polygon); } // 绘制五角星边框 g2d.setStroke(new BasicStroke(signBorderWidth)); g2d.setColor(signBorderColor); g2d.draw(polygon); // 绘制印章边框 g2d.setColor(borderColor); g2d.setStroke(new BasicStroke(borderWidth)); g2d.drawOval(-width / 2, -height / 2, width, height); g2d.setStroke(stroke); // 绘制印章名称 g2d.setFont(nameFont); g2d.setColor(nameColor); FontMetrics fm = g2d.getFontMetrics(); int w = fm.stringWidth(name);// 名称宽度 int h = fm.getHeight();// 名称高度 int y = fm.getAscent() - h / 2;// 求得中心线经过字体的高度的一半时的字体的起绘点 g2d.drawString(name, -w / 2, y + nameOffset); // 绘制印章单位 g2d.setFont(firmFont); g2d.setColor(firmColor); fm = g2d.getFontMetrics(); h = fm.getHeight();// 字高度 int count = firm.length();// 字数 int r = width / 2;// 半径,就假设此印章是个矩形,方便计算 float angle = (360 - firmAngle) / (count - 1);// 字间角度 float start = 90 + firmAngle / 2;// 以x轴正向为0,顺时针旋转 double vr = Math.toRadians(90);// 垂直旋转弧度 char[] chars = firm.toCharArray(); for (int i = 0; i < count; i++) { char c = chars[i];// 需要绘制的字符 int cw = fm.charWidth(c);// 此字符宽度 float a = start + angle * i;// 现在角度 double radians = Math.toRadians(a); g2d.rotate(radians);// 旋转坐标系,让要绘制的字符处于x正轴 float x = r - h;// 绘制字符的x坐标为半径减去字高度 // g2d.drawLine(0, 0, (int) x, 0);// debug g2d.translate(x, 0);// 移动到此位置,此时字和x轴垂直 g2d.rotate(vr);// 旋转90度,让字平行于x轴 g2d.scale(firmScale, 1);// 缩放字体宽度 g2d.drawString(String.valueOf(c), -cw / 2, 0);// 此点为字的中心点 // 将所有设置还原,等待绘制下一个 g2d.scale(1 / firmScale, 1); g2d.rotate(-vr); g2d.translate(-x, 0); g2d.rotate(-radians); } } /** * 获取具有指定半径外接圆的五角星顶点 * * @param radius * 圆半径 */ private Polygon getPentaclePoints(float radius) { if (radius <= 0) return null; float lradius = radius * 0.381966f;// 根据radius求内圆半径 double halfpi = Math.PI / 180f; Point[] points = new Point[10]; for (int i = 0; i < points.length; i++) { if (i % 2 == 1) points[i] = new Point( (int) (Math.sin(halfpi * 36 * i) * radius), (int) (Math.cos(halfpi * 36 * i) * radius)); else points[i] = new Point( (int) (Math.sin(halfpi * 36 * i) * lradius), (int) (Math.cos(halfpi * 36 * i) * lradius)); } Polygon polygon = new Polygon(); for (Point p : points) { polygon.addPoint(p.x, p.y); } return polygon; } /** * 导出此印章为透明背景的图片字节数组. * * @param format * 图片类型,如果为null,则默认为png * @return 数组 * @throws IOException * 写出图像数据出现问题 */ public byte[] export2pic(String format) throws IOException { int fix = 5;// 宽高修正,如果宽高就为图片宽高,可能边框线被切割 BufferedImage bi = new BufferedImage(getWidth() + fix * 2, getHeight() + fix * 2, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = bi.createGraphics(); g2d.translate(fix, fix); this.draw(g2d); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(bi, format == null ? "png" : format, baos); return baos.toByteArray(); } public int getWidth() { return width; } public int getHeight() { return height; } }
这个简单了,就是一个单纯的JFrame显示界面,拖拽出来的:
package i2534.iteye.com; import java.awt.BorderLayout; public class Main extends JFrame { private JPanel contentPane; private JPanel panel; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Main frame = new Main(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Main() { initComponents(); } private void initComponents() { setTitle("刻 章 办 证");//刻 章 居然违禁词 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BorderLayout(0, 0)); contentPane.add(getPanel(), BorderLayout.CENTER); } private JPanel getPanel() { if (panel == null) { panel = new JPanel() { private Seal seal = new Seal(); protected void paintComponent(java.awt.Graphics g) { super.paintComponent(g); g.translate((getWidth() - seal.getWidth()) / 2, (getHeight() - seal.getHeight()) / 2); seal.draw((Graphics2D) g); }; }; panel.setBackground(Color.WHITE); } return panel; } }
运行结果:
经过老三提醒,可以使用
Graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
进行抗锯齿处理.这个看需要自己酌情选择.
评论
5 楼
xfxlch
2014-04-23
up
Thx
Thx
4 楼
evan0625
2011-11-01
楼主威武,,,,千秋万代,一统江湖。
非常感谢
非常感谢
3 楼
xutao5641745
2011-07-11
楼主威武,,,,千秋万代,一统江湖。
2 楼
xdoc
2011-07-08
不错,顶一个
1 楼
修补匠
2011-07-04
给顶一个。
发表评论
-
公约数,公倍数和素数的简单计算
2012-04-01 16:08 1272为自己留作备份,省得用到的时候再去寻找 简单的计算最大公约数 ... -
java简单打印
2012-03-08 09:56 1189没什么,就是一个简单的打印,留作存档 publi ... -
httpclient4的封装
2012-01-06 15:11 4566没什么特别的,自己封装着用的. package cpcns. ... -
h2的baseDir
2011-11-11 16:38 1412使用h2 1.3.161.在web项目中.计划在Listene ... -
eclipse下自动打包项目并部署到web项目的lib下
2011-10-18 15:59 5065修改web项目的.settings下的org.eclipse. ... -
获取汉字的五笔,全拼和双拼的工具类
2011-10-10 15:51 2287如题,项目需要,首先可用的自然是pinyin4j. 在不考虑 ... -
五笔86和汉字对照表
2011-10-09 16:53 2476项目要用到汉字转拼音和五笔,拼音容易,使用pinyin4j. ... -
java System属性
2011-09-19 10:14 1338自定义 : java -Dname=value S ... -
log4j日志文件的相对路径
2011-09-01 10:51 6759一直没能很好的解决log4j的日志文件的保存路径.今天恰好又遇 ... -
Apache codec中的base64
2011-07-20 09:46 2241一直使用sun的base64,但是感觉不是很好,毕竟不是标准包 ... -
svg中的arc转化为java中的arc
2011-05-27 15:31 2631最近项目需要解析svg中的path.直线和贝塞尔曲线都好办,唯 ... -
swing的拖拽(dnd)的简单实现
2011-03-28 10:18 1956这几天项目需要用到dnd,API比较麻烦.在网上找了很多,都只 ... -
自用的MD5计算工具
2011-03-11 15:45 1740/** * 检查输入流的MD5值是否符合.如果MD5为 ... -
用jsoup分析下载巨鲸的mp3
2011-02-25 15:37 1680这两天突然想听听杰克逊的歌.首选当然是巨鲸. 支持正版. ... -
获取子类的泛型参数
2011-01-27 16:03 1307用的时候不好找,今天看nutz的dao的源码看到了,摘出来备份 ... -
简单的通过注解运行的dao
2011-01-26 11:47 1715项目是个老项目,是个比较简单,但是编码比较凌乱的项目.数据库字 ... -
java模拟js的escape和unescape函数
2011-01-05 10:43 3422这个是在网上找的代码,然后修改了下.作用标题已经很明显了. ... -
自己写的多线程对象池
2010-12-10 16:53 1274/** * 排版器的一个公用接口 <br> ... -
apache poi读取excel中的颜色,真是坑爹啊
2010-12-01 16:23 16842工作原因,需要使用poi来读取excel中的所有内容. 其他 ... -
查找项目中实现接口的所有类
2010-11-15 13:45 5803最近为项目写了一个公式执行功能,其中函数太多,只能写了一个接口 ...
相关推荐
NULL 博文链接:https://128kj.iteye.com/blog/2062673
易语言画弧做印章源码例程程序使用易语言画板组件实现画印章功能。点评:易语言画弧做印章源码是易语言画板应用例程。
易语言画弧做印章源码
使用jdk的绘图工具来绘制印章,该代码中只绘制了圆形印章,印章中的内容包括公司名称、中间的五角星以及印章的类型
用gan实现的印章擦除,同时你也可以用这个方法擦除去其他噪声,比如水印,手写字等用gan实现的印章擦除,同时你也可以用这个方法擦除去其他噪声,比如水印,手写字等用gan实现的印章擦除,同时你也可以用这个方法...
印章识别算法实例
对印章进行识别,显示印章图案。基于SVM方法
vs2005的环境,可以将你想要的印章显示出来,可以看看。
印章_API.e 印章_位图旋转.e .版本 2 hDC = 取设备场景 (画板1.取窗口句柄 ()) 画板1.底图 = { } ' 中心点 中心点X = 画板1.宽度 \ 2 中心点Y = 画板1.高度 \ 2 ' 计算字数 cnt = 取文本长度 (编辑框_主标题...
印章小程序实现 c语言代码实现 位图文件操作 详细解析位图数据结构
中班美术绘画教案《蔬菜印章画》润新教育.txt
印章识别效果非常好的代码,主要使用了支持向量机
JAVA WORD中实现电子印章效果 文字浮于印章上面
包含 ZWFWC0120-2018国家政务服务平台统一电子印章印章技术要求;3ZWFWC0122-2018国家政务服务平台统一电子印章系统接口要求;4ZWFWC0119-2018国家政务服务平台统一电子印章签章技术要求等文档
自己做的一个生成自定义圆形印章的iOS demo 。有圆形的弧形文字算法。 Objective-c 写的。
java调用opencv利用霍夫圆定位查找印章,并返回质心坐标和半径以达到截取印章的目的
易语言画弧做印章源码
java graphics2d绘制的印章在Android平台无法使用,所以用Android的graphics绘制了印章图像
sift 印章 图片 特征对比及特征的匹配化 matlab 印章特征提取于识别
本文当介绍了椭圆形印章绘制相关的核心算法,包括环绕印章边缘文字的均与分布,文字的旋转算法,文字的仿射变换等。并分享了使用GDI+绘制椭圆形印章的核心代码。