日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

java生成企业公章图片源代码

發布時間:2024/1/11 windows 30 coder
生活随笔 收集整理的這篇文章主要介紹了 java生成企业公章图片源代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

企業公章圖片在電子簽章業務中應用廣泛,在電子簽章應用過程中首先需要生成公章圖片,然后再使用公章圖片結合數字簽名技術完成電子簽,這樣就實現了從可視化到不可篡改的數字化電子簽章功能,以下是企業公章圖片生成源代碼。
`?
import com.resrun.utils.Base64;
import org.apache.pdfbox.io.IOUtils;
import org.springframework.stereotype.Service;

import javax.imageio.ImageIO;
import java.awt.;
import java.awt.image.BufferedImage;
import java.io.
;

/**

  • @Description: 企業簽章業務

  • @Package: com.resrun.service.image

  • @ClassName: EntSealGenerateService

  • @copyright 北京資源律動科技有限公司
    */
    @Service
    public class EntSealGenerateService {

    /**

    • @Description #生成企業簽章

    • @Param [topText, middleText]

    • @return byte[]
      **/
      public byte[] generateEntSeal(String topText,String middleText){

      byte[] bytes = export2pic("png", middleText,topText);
      return bytes;
      }

    /**

    • 印章名稱距中心點偏移量,按照y軸方向
      /
      private int nameOffset = 50;
      /
      *
    • 印章寬度
      /
      private int width = 200;
      /
      *
    • 印章高度
      /
      private int height = 200;
      /
      *
    • 印章中心標志(默認為五角星)外接圓半徑
      /
      private float radius = 30;
      /
      *
    • 印章名稱顏色
      /
      private Color nameColor = Color.RED;
      /
      *
    • 印章所屬單位
      /
      // private String firm;
      /
      *
    • 印章所屬單位顏色
      /
      private Color firmColor = Color.RED;
      private float firmScale = 0.7F;
      /
      *
    • 邊框線寬
      /
      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,String middleText,String topText) {
    // 把繪制起點挪到圓中心點
    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.setFont(nameFont);
     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);   //g2d.setStroke(new BasicStroke(10F));
     FontMetrics fm = g2d.getFontMetrics();
     int w = fm.stringWidth(middleText);// 名稱寬度
     int h = fm.getHeight();// 名稱高度
     int y = fm.getAscent() - h / 2;// 求得中心線經過字體的高度的一半時的字體的起繪點
     g2d.drawString(middleText, -w / 2, y + nameOffset);
    
     // 繪制印章單位
     g2d.setFont(getFirmFont(topText));
     g2d.setColor(firmColor);
     fm = g2d.getFontMetrics();
     h = fm.getHeight();// 字高度
    
     int count = topText.length();// 字數
     int r = width / 2;// 半徑,就假設此印章是個矩形,方便計算
     float angle;
     float start;
    
     if(count>1 && count <=10){
         angle = 20f;// 字間角度
         start = 90+(360 - angle*(count-1))/2;// 以x軸正向為0,順時針旋轉
     }else if(count > 10){
         angle = (360 - firmAngle) / (count-1);// 字間角度
         start = 90+(360 - angle*(count-1))/2;// 以x軸正向為0,順時針旋轉
     }else{
         angle = 0f;// 字間角度
         start = 90+(360 - angle*(2-1))/2;// 以x軸正向為0,順時針旋轉
     }
     double vr = Math.toRadians(90);// 垂直旋轉弧度
     char[] chars = topText.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.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;
    }

    public int getWidth() {
    return width;
    }

    public int getHeight() {
    return height;
    }

    private Font nameFont = new Font("宋體", Font.PLAIN, 19);

    private Font getFirmFont(String topText){
    Font font = null;
    int len = topText.length();
    System.out.println(len);
    if(len==1){
    setFirmAngle(355);
    font = new Font("宋體", Font.PLAIN, 25);
    }else if(len>1 && len<=3){
    setFirmAngle(310);
    font = new Font("宋體", Font.PLAIN, 25);
    }else if(len>3 && len<=6){
    setFirmAngle(250);
    font = new Font("宋體", Font.PLAIN, 25);
    }else if(len>6 && len <=10){
    setFirmAngle(200);
    font = new Font("宋體", Font.PLAIN, 25);
    }else if(len>10 && len<=13){
    setFirmAngle(180);
    font = new Font("宋體", Font.PLAIN, 25);
    }
    else if(len>13 && len<=20){
    font = new Font("宋體", Font.PLAIN, 25);
    setFirmAngle(120);
    }else if(len>20 && len <= 25){
    font = new Font("宋體", Font.PLAIN, 23);

         setFirmAngle(80);
     }else if(len>25 && len < 30){
         setFirmAngle(80);
         font = new Font("宋體", Font.PLAIN, 19);
     }else if(len>=30 && len <= 40){
         setFirmAngle(80);
         font = new Font("宋體", Font.PLAIN, 19);
     }else{
         setFirmAngle(10);
         font = new Font("宋體", Font.PLAIN, 17);
     }
     return font;
    

    }

    private int firmAngle;
    public void setFirmAngle(int firmAngle){
    this.firmAngle = firmAngle;
    }

    /**

    • 導出此印章為透明背景的圖片字節數組.
    • @param format
    •        圖片類型,如果為null,則默認為png
      
    • @return 數組
    • @throws FileNotFoundException
    • @throws IOException
    •         寫出圖像數據出現問題
      

    */
    public byte[] export2pic(String format,String middleText,String topText) {
    int fix = 5;// 寬高修正,如果寬高就為圖片寬高,可能邊框線被切割
    BufferedImage bi = new BufferedImage(getWidth() + fix * 2, getHeight()
    + fix * 2, 3);

     Graphics2D g2d = bi.createGraphics();
     //防鋸齒狀毛刺算法
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     g2d.translate(fix, fix);
     draw(g2d,middleText,topText);
    
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     try {
         ImageIO.write(bi, format == null ? "png" : format, baos);
         return baos.toByteArray();
     } catch (IOException e) {
         throw new RuntimeException(topText+":生成企業簽章失敗",e);
     }finally {
         try {
             if(baos!=null)
                 baos.close();
         } catch (IOException e) {
         }
     }
    

    }
    }

?`

總結

以上是生活随笔為你收集整理的java生成企业公章图片源代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲视频在线观看网站 | 五月天婷婷激情 | x88av视频 | 网红日批视频 | 超碰成人免费在线 | 日本精品视频网站 | 国产网站无遮挡 | 日韩欧美精品在线观看 | 国产精品免费视频一区二区 | 亚洲精品视频一区二区三区 | 天天草比 | av香蕉网 | 91免费播放 | 亚洲精品在线观看av | 色久在线 | 娇妻高潮浓精白浆xxⅹ | 看毛片视频| 国产专区第一页 | 713电影免费播放国语 | 日本边添边摸边做边爱 | 成人小视频免费在线观看 | 黄色在线免费观看网站 | 网友自拍一区 | 亚洲精品97久久 | 日韩aa视频| 亚洲AV午夜福利精品一级无码 | 日韩一区二区不卡 | 成人在线中文字幕 | 丝袜人妖 | 日本一区二区不卡视频 | 四虎在线免费观看 | www一级片| 久久精品免费一区二区 | 蜜桃成人网 | 国产又黄又粗的视频 | 久久精品国产久精国产 | 亚洲色图欧美自拍 | 蜜桃臀av一区二区三区 | 靠逼在线观看 | 香蕉视频国产在线观看 | 男性影院| 中文字幕 国产精品 | 成人一级黄色片 | 欧美99久久精品乱码影视 | 亚洲三级电影网站 | 意大利性荡欲xxxxxx | 国产黄频| 久久亚洲精品无码va白人极品 | аⅴ资源新版在线天堂 | 国产精品一区二区三区在线免费观看 | aaaa一级片 | 麻豆免费在线视频 | 午夜播放| 久久狠狠婷婷 | 一区二区国产在线观看 | 国产一区二区在线播放 | 福利片网址 | 欧美综合日韩 | 午夜激情导航 | 浪漫樱花在线观看高清动漫 | 一级黄色录像免费观看 | 国产精品主播视频 | 少妇人妻互换不带套 | 久久久久久久久久久久久久久久久久 | 日韩精品在线免费观看 | 91大神在线观看视频 | 黄色片播放器 | 葵司有码中文字幕二三区 | 强迫凌虐淫辱の牝奴在线观看 | 欧美极品jizzhd欧美 | 在线观看一区 | 超碰在线免费播放 | 一级黄网站 | 最近2019中文字幕大全第二页 | 日韩欧美久久久 | 污视频网站在线播放 | 182av| 69sex久久精品国产麻豆 | 91亚色在线观看 | 阿v天堂网| 91网入口| 视频免费在线观看 | 岛国久久久 | free性满足hd国产精品久 | 成人高清免费观看 | 日韩手机在线视频 | 日本不卡网站 | 亚洲最新av网站 | 欧美亚洲另类图片 | 翔田千里88av中文字幕 | 欧美成人一区二区三区高清 | 久久高清| 国产精品高潮呻吟久久久 | 亚洲欧美自偷自拍 | 日韩人妻精品中文字幕 | 人人亚洲 | 亚洲成a人片 | 蜜臀精品一区二区三区 | 久久亚洲综合网 |