这里有个收费的印章制作:https://tools.kalvinbg.cn/convenience/seal
这里有个java的印章制作:https://github.com/xxddccaa/SealUtil
这里还有一个别人的印章数据集:https://drive.usercontent.google.com/download?id=125SgEmHFUIzDexsrj2d3yMJdYMVhovti&export=download&authuser=0

本篇文章也用java制作一下印章数据集,可以应用于印章检测和印章识别。
新建空的java工程:

将seal包拷贝进去,并全局替换包路径:

将Main也弄进去,包路径也需要改:

路径也修改一下:

就可以执行了,完整的Main是:
java展开代码package 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类用于配置印章的整体设置,包括字体、大小、颜色、边线等参数。
java展开代码SealConfiguration configuration = new SealConfiguration();
SealFont类用于设置印章中的主要文字。可以配置字体的大小、字形、间距等参数。
java展开代码SealFont 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):设置字体与印章边界的距离。副文字是印章上辅助性的文本,类似于说明性文字。
java展开代码SealFont viceFont = new SealFont();
viceFont.setBold(true);
viceFont.setFontFamily("宋体");
viceFont.setFontText("正版认证");
viceFont.setFontSize(22);
viceFont.setFontSpace(12.0);
viceFont.setMarginSize(5);
中心文字通常用于印章的正中位置,可以是公司标志、星号等。
java展开代码SealFont centerFont = new SealFont();
centerFont.setBold(true);
centerFont.setFontFamily("宋体");
centerFont.setFontText("发货专用");
centerFont.setFontSize(25);
抬头文字一般位于印章的顶部,用于额外说明。
java展开代码SealFont 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):设置印章的内环线的粗细和半径。例如:
java展开代码configuration.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方法生成,存储路径可自行指定。
java展开代码SealUtil.buildAndStoreSeal(configuration, "D:\\公章.png");
私章的配置稍有不同,主要是使用个人名称和“印”字生成。
java展开代码SealFont font = new SealFont();
font.setFontSize(120).setBold(true).setFontText("诸葛孔明");
SealUtil.buildAndStorePersonSeal(300, 16, font, "印", "D:\\私章.png");
buildAndStorePersonSeal(int, int, SealFont, String, String):生成私章的方法。
为了生成印章,你可以根据以下配置:
试了一些效果,不是很完美的效果,这个代码还需要进一步调整,圆形章里面的字是变长的时候,那还需要改代码。
部分代码:
python展开代码if __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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!