package com.test; 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.RenderingHints; import java.awt.Stroke; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; 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); } g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } /** * 获取具有指定半径外接圆的五角星顶点 * * @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; } public static void main(String[] args) throws IOException { Seal seal = new Seal(); BufferedImage image = new BufferedImage(seal.getWidth(), seal.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = image.createGraphics(); seal.draw(g2d); ImageIO.write(image, "png", new File("E:\\财务支付章.png")); } }
相关推荐
使用印章工具,可以修复印章,并将其还原到原本的状态。 第五个步骤是调整印章的颜色和方向。使用曲线工具,可以简单地调整印章的颜色。使用直尺工具和菜单/Image/Rotate Canvas/Arbitrary,可以调整印章的角度。 ...
CDR辅助工具 可以简化很多工作 试试就知道了
它不仅提供基础的截屏功能,还具有丰富的编辑和注释工具,其中“印章”功能尤其实用,能够为你的截图或图片添加专业、个性化的标记。在提供的压缩包文件“Stamps”中,包含了各种各样的印章资源,使得用户在处理图像...
例如,斑点修复工具可以帮助去除照片上的瑕疵,而克隆印章工具则能复制图像的一部分并粘贴到其他位置,实现无缝修复。此外,还可以利用裁剪工具调整照片的构图,或者使用旋转和翻转功能修正拍摄角度。 对于人像摄影...
通常,去水印工具会提供画笔工具、克隆印章工具等,让用户选择并涂抹需要去除的水印区域。在"图片去水印超简单"中,这些工具可能被设计得直观易用,使得用户只需几步操作就能看到显著的效果。 总之,“图片去水印超...
最新PHP产品防伪查询网站源码系统(带证书模板),证书模版含90套授权证书模板,非常适合做微商的站长们下载,做微商防伪查询很不错的一套源码带psd文件和印章工具。 安装说明: 环境要求:PHP+MYSQL,PHP 版本请...
- **克隆印章**:使用克隆印章工具,选取一个与水印周围相似的源点,然后在水印上进行涂抹,复制周围无水印的像素以覆盖水印。 - **修补工具**:如果水印周围有复杂纹理,可以尝试使用修补工具,将水印部分剪切...
此外,这些工具通常会提供一系列编辑选项,如橡皮擦工具、克隆印章工具等,让用户能精细地处理图片。 图片处理中的文字去除有多种方法,例如: 1. **遮罩技术**:创建一个与文字相同大小的遮罩,然后将遮罩与原图...
修复画笔工具能借鉴周围区域的纹理和颜色,而克隆印章工具则能复制并粘贴图像的一部分以覆盖目标物体。 2. **Photoshop Express**:Adobe的简化版产品,适合快速编辑。它提供了“斑点修复”工具,可以自动填充和...
- Adobe Photoshop:专业级图像处理软件,提供了强大的克隆印章工具和其他编辑功能,适合高级用户。 - GIMP:免费开源的图像编辑器,提供多种去水印插件。 - Online Image Editor:在线工具,操作简单,适合快速...
2. 克隆印章工具:复制并粘贴图像的其他部分到水印区域,以消除水印。 3. 模糊处理:对水印区域进行模糊,使水印与背景融合,降低其可见性。 4. 高斯滤波:使用高斯滤波器平滑图像,有助于减少水印的痕迹。 5. 合成...
**3-12:PhotoShop CS2—印章工具—图样印章工具** 图样印章工具则用于在图像中添加预定义的图案。 **3-13:PhotoShop CS2—印章工具—模糊工具** 模糊工具可以帮助柔化图像的特定区域,减少锐度。 **3-14:Photo...
1. **克隆印章工具**:这是许多去水印软件中最常见的一种功能。它允许用户复制图片中水印附近的一块区域,然后将其覆盖在水印上,达到消除水印的效果。这种方法适用于水印背景较为单一且与周围环境相似的情况。 2. ...
绿色版工具,无需安装。一个非常强大的 PDF 水印工具,可以批量为 PDF 文件添加文本或图片水印,如文件名、公司名、签名、产品图片,从而保护 PDF 文件;它也支持为 PDF 文件添加日期时间、页码、作者等标记信息。
2. **选择工具**:uMark Professional 提供了多种去水印工具,如画笔工具、克隆印章工具等,用户可以根据水印的特点选择合适的工具。 3. **遮盖与修复**:使用选择的工具,用户可以覆盖水印区域,然后利用相邻像素...
它提供了丰富的预训练模型和工具,便于快速实现深度学习任务。在这个项目中,PaddlePaddle可能被用作基础框架,用于训练和优化针对印章检测和分类的模型。 3. **PaddleX**:PaddleX是PaddlePaddle的高级API,专为零...
总结来说,这款基于Maven和JavaFX的印章生成工具,结合了现代化的开发工具和强大的图形处理能力,为用户提供了一个便捷的印章设计环境。通过深入理解JavaFX的图形API、Maven的构建管理以及图像处理原理,我们可以...
5. 使用印章工具:使用印章工具按轮廓线条顺势处理。 6. 眼角和鼻子处理:眼角部分需要很细致的处理保持原来的轮廓;鼻子的处理中,印章工具不能放太大。 7. 处理下巴:下巴部分是最难处理的部分,先将小的脏点漫漫...
这种工具通常包含图像编辑功能,如选择工具、克隆印章工具、修复画笔工具等。选择工具允许用户精确地框选需要去除的文字区域;克隆印章工具可以复制周围无文字的图像部分,覆盖掉文字;修复画笔工具则通过融合周围的...