这里有个收费的印章制作:https://tools.kalvinbg.cn/convenience/seal
这里有个java的印章制作:https://github.com/xddun/SealUtil
这里还有一个别人的印章数据集:https://drive.usercontent.google.com/download?id=125SgEmHFUIzDexsrj2d3yMJdYMVhovti&export=download&authuser=0
本篇文章也用java制作一下印章数据集,可以应用于印章检测和印章识别。
新建空的java工程:
将seal包拷贝进去,并全局替换包路径:
将Main也弄进去,包路径也需要改:
路径也修改一下:
就可以执行了,完整的Main是:
javapackage org.example;
import org.seal.SealUtil;
import org.seal.configuration.SealCircle;
import org.seal.configuration.SealConfiguration;
import org.seal.configuration.SealFont;
import java.awt.*;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws Exception {
/**
* 印章配置文件
*/
SealConfiguration configuration = new SealConfiguration();
/**
* 主文字
*/
SealFont mainFont = new SealFont();
mainFont.setBold(true);
mainFont.setFontFamily("楷体");
mainFont.setMarginSize(10);
/**************************************************/
//mainFont.setFontText("欢乐无敌制图网淘宝店专用章");
//mainFont.setFontSize(35);
//mainFont.setFontSpace(35.0);
/**************************************************/
//mainFont.setFontText("ZHITUWANG CO.LTDECIDDO SH NANNINGSHI");
//mainFont.setFontSize(20);
//mainFont.setFontSpace(15.0);
/**************************************************/
mainFont.setFontText("欢乐无敌制图网淘宝店专用章");
mainFont.setFontSize(25);
mainFont.setFontSpace(12.0);
/**
* 副文字
*/
SealFont viceFont = new SealFont();
viceFont.setBold(true);
viceFont.setFontFamily("宋体");
viceFont.setMarginSize(5);
/**************************************************/
//viceFont.setFontText("123456789012345");
//viceFont.setFontSize(13);
//viceFont.setFontSpace(12.0);
/**************************************************/
viceFont.setFontText("正版认证");
viceFont.setFontSize(22);
viceFont.setFontSpace(12.0);
/**
* 中心文字
*/
SealFont centerFont = new SealFont();
centerFont.setBold(true);
centerFont.setFontFamily("宋体");
/**************************************************/
//centerFont.setFontText("★");
//centerFont.setFontSize(100);
/**************************************************/
//centerFont.setFontText("淘宝欢乐\n制图网淘宝\n专用章");
//centerFont.setFontSize(20);
/**************************************************/
//centerFont.setFontText("123456789012345");
//centerFont.setFontSize(20);
/**************************************************/
centerFont.setFontText("发货专用");
centerFont.setFontSize(25);
/**
* 抬头文字
*/
SealFont titleFont = new SealFont();
titleFont.setBold(true);
titleFont.setFontFamily("宋体");
titleFont.setFontSize(22);
/**************************************************/
//titleFont.setFontText("发货专用");
//titleFont.setMarginSize(68);
//titleFont.setFontSpace(10.0);
/**************************************************/
titleFont.setFontText("正版认证");
titleFont.setMarginSize(68);
titleFont.setMarginSize(27);
/**
* 添加主文字
*/
configuration.setMainFont(mainFont);
/**
* 添加副文字
*/
configuration.setViceFont(viceFont);
/**
* 添加中心文字
*/
configuration.setCenterFont(centerFont);
/**
* 添加抬头文字
*/
//configuration.setTitleFont(titleFont);
/**
* 图片大小
*/
configuration.setImageSize(300);
/**
* 背景颜色
*/
configuration.setBackgroudColor(Color.RED);
/**
* 边线粗细、半径
*/
//configuration.setBorderCircle(new SealCircle(3, 140, 140));
configuration.setBorderCircle(new SealCircle(3, 140, 100));
/**
* 内边线粗细、半径
*/
//configuration.setBorderInnerCircle(new SealCircle(1, 135, 135));
configuration.setBorderInnerCircle(new SealCircle(1, 135, 95));
/**
* 内环线粗细、半径
*/
//configuration.setInnerCircle(new SealCircle(2, 105, 105));
configuration.setInnerCircle(new SealCircle(2, 85, 45));
//1.生成公章
try {
SealUtil.buildAndStoreSeal(configuration, "D:\\公章.png");
} catch (IOException e) {
e.printStackTrace();
}
//2.生成私章
SealFont font = new SealFont();
font.setFontSize(120).setBold(true).setFontText("诸葛孔明");
SealUtil.buildAndStorePersonSeal(300, 16, font, "印", "D:\\私章.png");
}
}
本文档解释如何通过上述代码设置参数生成印章。代码使用了SealUtil
类生成公章和私章。以下是各个配置参数及其作用的详细说明:
SealConfiguration
类用于配置印章的整体设置,包括字体、大小、颜色、边线等参数。
javaSealConfiguration configuration = new SealConfiguration();
SealFont
类用于设置印章中的主要文字。可以配置字体的大小、字形、间距等参数。
javaSealFont mainFont = new SealFont();
mainFont.setBold(true); // 是否加粗
mainFont.setFontFamily("楷体"); // 字体类型
mainFont.setFontText("欢乐无敌制图网淘宝店专用章"); // 文字内容
mainFont.setFontSize(25); // 字体大小
mainFont.setFontSpace(12.0); // 字符间距
mainFont.setMarginSize(10); // 文字与边界的间距
setBold(boolean)
:设置文字是否加粗。setFontFamily(String)
:设置字体类型,例如“楷体”、“宋体”等。setFontText(String)
:设置印章上的主要文字内容。setFontSize(int)
:设置字体大小。setFontSpace(double)
:设置字符之间的间距。setMarginSize(int)
:设置字体与印章边界的距离。副文字是印章上辅助性的文本,类似于说明性文字。
javaSealFont viceFont = new SealFont();
viceFont.setBold(true);
viceFont.setFontFamily("宋体");
viceFont.setFontText("正版认证");
viceFont.setFontSize(22);
viceFont.setFontSpace(12.0);
viceFont.setMarginSize(5);
中心文字通常用于印章的正中位置,可以是公司标志、星号等。
javaSealFont centerFont = new SealFont();
centerFont.setBold(true);
centerFont.setFontFamily("宋体");
centerFont.setFontText("发货专用");
centerFont.setFontSize(25);
抬头文字一般位于印章的顶部,用于额外说明。
javaSealFont titleFont = new SealFont();
titleFont.setBold(true);
titleFont.setFontFamily("宋体");
titleFont.setFontText("正版认证");
titleFont.setFontSize(22);
titleFont.setMarginSize(68);
setImageSize(int)
:设置印章的图片大小(宽度和高度,单位为像素)。setBackgroudColor(Color)
:设置印章背景颜色,这里设置为红色。setBorderCircle(SealCircle)
:设置印章边框,包括边框粗细和半径。参数是SealCircle
对象,包含边框的线条粗细、外圆和内圆的半径。setBorderInnerCircle(SealCircle)
:设置印章内边线的粗细和半径。setInnerCircle(SealCircle)
:设置印章的内环线的粗细和半径。例如:
javaconfiguration.setImageSize(300); // 设置印章大小为300px
configuration.setBackgroudColor(Color.RED); // 设置背景颜色为红色
configuration.setBorderCircle(new SealCircle(3, 140, 100)); // 设置外边框,线条粗细为3,外圆半径140,内圆半径100
configuration.setBorderInnerCircle(new SealCircle(1, 135, 95)); // 设置内边框
configuration.setInnerCircle(new SealCircle(2, 85, 45)); // 设置内环线
公章通过SealUtil.buildAndStoreSeal
方法生成,存储路径可自行指定。
javaSealUtil.buildAndStoreSeal(configuration, "D:\\公章.png");
私章的配置稍有不同,主要是使用个人名称和“印”字生成。
javaSealFont font = new SealFont();
font.setFontSize(120).setBold(true).setFontText("诸葛孔明");
SealUtil.buildAndStorePersonSeal(300, 16, font, "印", "D:\\私章.png");
buildAndStorePersonSeal(int, int, SealFont, String, String)
:生成私章的方法。
为了生成印章,你可以根据以下配置:
试了一些效果,不是很完美的效果,这个代码还需要进一步调整,圆形章里面的字是变长的时候,那还需要改代码。
部分代码:
pythonif __name__ == '__main__':
img_size = 558
# 创建透明背景图像
img = Image.new('RGBA', (img_size, img_size), (0, 0, 0, 0))
img = draw_rotated_text(img, "我睡觉哦笑了")
img = draw_rotated_text_fu2(img, "SDHASODHQWBE12312535", img_size=img_size)
img = draw_filled_star(img, img_size=img_size)
img = draw_ellipse(img, img_size=img_size)
img = draw_main_text(img, "财务专用章", img_size=img_size)
# 显示图像
img.show()
img.save('final.png', 'PNG')
这代码发布出来估计不太好,效果还是不错的:
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!