JAVA生成椭圆形签章

话不多说,直接贴代码吧。

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.UUID;

import javax.imageio.ImageIO;

import org.apache.commons.lang.StringUtils;


/**
 * 勾画圆形公司章
 * 
 * @author ldd
 */
public class DrawSeal {
    //生成文件路径
    public static final String FILE_PATH = "d:/";
    
    private final static int WIDTH = 160;
    
    private final static int HEIGHT = 110;
    
    /**
     * 画圆形章
     * @param name1 章的名字
     * @param name2 公司的名字
     * @param numCode 公司的数字编码
     * @param width 
     * @param height
     * @return
     */
    public static String drawCircularChapter(String name1, String name2, String numCode){
        OutputStream out = null;
        InputStream in = null;
        //创建缓存
        BufferedImage bufImg = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
        //获得画布
        Graphics2D gs = bufImg.createGraphics();
        //设置颜色
        gs.setColor(Color.WHITE);
        //填充区域
        gs.fillRect(0, 0, WIDTH, HEIGHT);
        //设置画笔颜色
        gs.setColor(new Color(204,41,41));
        //画五角星
        drawFiveStar(gs, WIDTH/2, (HEIGHT-10)/2, (HEIGHT-10)/6-3);
        //设置画笔宽度
        gs.setStroke(new BasicStroke(3));
        //画圆形边框
        gs.drawOval(2, 2, WIDTH-4, HEIGHT-10);
        //设置字体
        gs.setFont(new Font("宋体", Font.BOLD, 21));
//        画数据(合同专用章)
        drawCenterMessage(gs, name1, WIDTH/2+2, (HEIGHT-10) * 4 / 5);
        if (StringUtils.isNotEmpty(name2) && name2.length()>11) {
            int len = name2.length();
            int fontSize = 18;
            switch (len) {
            case 12:
                fontSize = 20;
                break;
            case 13:
                fontSize = 19;
                break;
            case 14:
                fontSize = 19;
                break;
            case 15:
                fontSize = 18;
                break;
            case 16:
                fontSize = 17;
                break;
            case 17:
                fontSize = 16;
                break;
            case 18:
                fontSize = 15;
                break;
            case 19:
                fontSize = 14;
                break;
            case 20:
                fontSize = 14;
                break;
            case 21:
                fontSize = 12;
                break;
            case 22:
                fontSize = 12;
                break;
            case 23:
                fontSize = 10;
                break;
            case 24:
                fontSize = 10;
                break;
            case 25:
                fontSize = 9;
                break;
            default :
                fontSize = 18;
                break;
            }
            //设置字体
            gs.setFont(new Font("宋体", Font.PLAIN, fontSize));
        }
        //画上方的环形字
        drawUpperMessage(gs, name2, WIDTH/2, (HEIGHT-10)/2, WIDTH/2-8, (HEIGHT-10)/2-8);
        //设置字体
        gs.setFont(new Font("宋体", Font.BOLD, 9));
        //画下方的环形数字
        drawBelowNumber(gs, numCode, WIDTH/2, (HEIGHT-10)/2, WIDTH/2-8, (HEIGHT-10)/2+8);
        //释放此图形的上下文以及它使用的所有系统资源
        gs.dispose();
        //输出图片
        try {
            StringBuffer fileDir = new StringBuffer();
            fileDir.append(Calendar.getInstance().get(Calendar.YEAR)).append(File.separator).append(Calendar.getInstance().get(Calendar.MONTH)+1).append(File.separator).a
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值