java 電子印章 png 透明圖片
package com.hwaggLee.swing.graphics2D;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Date;
import javax.imageio.ImageIO;
//java專案www.fhadmin.org
public class UtilsGraphics2D {
private static final int WIDTH = 500;//圖片寬度
private static final int HEIGHT = 500;//圖片高度
private static String message = "公章測試有限公司";
private static String centerName = "我是誰";
private static String year = "2016年06月23日";
public static void main(String[] args) throws Exception{
BufferedImage image = startGraphics2D();
try {
String filePath = "C:\\Users\\huage\\Desktop\\121231\\"+new Date().getTime()+".png";
ImageIO.write(image, "png", new File(filePath)); //將其儲存在C:\\Users\\huage\\Desktop\\121231\\下
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static BufferedImage startGraphics2D(){
// 定義影像buffer
BufferedImage buffImg = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
g.setColor(Color.RED);
//設定鋸齒圓滑
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//繪製圓
int radius = HEIGHT/3;//周半徑
int CENTERX = WIDTH/2;//畫圖所出位置
int CENTERY = HEIGHT/2;//畫圖所處位置
Ellipse2D circle = new Ellipse2D.Double();
circle.setFrameFromCenter(CENTERX, CENTERY, CENTERX + radius, CENTERY + radius);
g.draw(circle);
//繪製中間的五角星
g.setFont(new Font("宋體", Font.BOLD, 120));
g.drawString("★", CENTERX-(120/2), CENTERY+(120/3));
//新增姓名
g.setFont(new Font("宋體", Font.LAYOUT_LEFT_TO_RIGHT, 30));// 寫入簽名
g.drawString(centerName, CENTERX -(40), CENTERY +(30+50));
//新增年份
g.setFont(new Font("宋體", Font.LAYOUT_LEFT_TO_RIGHT, 20));// 寫入簽名
g.drawString(year, CENTERX -(60), CENTERY +(30+80));
//根據輸入字串得到字元陣列
String[] messages2 = message.split("",0);
String[] messages = new String[messages2.length-1];
System.arraycopy(messages2,1,messages,0,messages2.length-1);
//輸入的字數
int ilength = messages.length;
//設定字型屬性
int fontsize = 40;
Font f = new Font("Serif", Font.BOLD, fontsize);
FontRenderContext context = g.getFontRenderContext();
Rectangle2D bounds = f.getStringBounds(message, context);
//字元寬度=字串長度/字元數
double char_interval = (bounds.getWidth() / ilength);
//上坡度
double ascent = -bounds.getY();
int first = 0,second = 0;
boolean odd = false;
if (ilength%2 == 1)
{
first = (ilength-1)/2;
odd = true;
}
else
{
first = (ilength)/2-1;
second = (ilength)/2;
odd = false;
}
double radius2 = radius - ascent;
double x0 = CENTERX;
double y0 = CENTERY - radius + ascent;
//旋轉角度
double a = 2*Math.asin(char_interval/(2*radius2));
if (odd)
{
g.setFont(f);
g.drawString(messages[first], (float)(x0 - char_interval/2), (float)y0);
//中心點的右邊
for (int i=first+1;i<ilength;i++)
{
double aa = (i - first) * a;
double ax = radius2 * Math.sin(aa);
double ay = radius2 - radius2 * Math.cos(aa);
AffineTransform transform = AffineTransform.getRotateInstance(aa);//,x0 + ax, y0 + ay);
Font f2 = f.deriveFont(transform);
g.setFont(f2);
g.drawString(messages[i], (float)(x0 + ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay - char_interval/2* Math.sin(aa)));
}
//中心點的左邊
for (int i=first-1;i>-1;i--)
{
double aa = (first - i) * a;
double ax = radius2 * Math.sin(aa);
double ay = radius2 - radius2 * Math.cos(aa);
AffineTransform transform = AffineTransform.getRotateInstance(-aa);//,x0 + ax, y0 + ay);
Font f2 = f.deriveFont(transform);
g.setFont(f2);
g.drawString(messages[i], (float)(x0 - ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay + char_interval/2* Math.sin(aa)));
}
}
else
{
//中心點的右邊
for (int i=second;i<ilength;i++)
{
double aa = (i - second + 0.5) * a;
double ax = radius2 * Math.sin(aa);
double ay = radius2 - radius2 * Math.cos(aa);
AffineTransform transform = AffineTransform.getRotateInstance(aa);//,x0 + ax, y0 + ay);
Font f2 = f.deriveFont(transform);
g.setFont(f2);
g.drawString(messages[i], (float)(x0 + ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay - char_interval/2* Math.sin(aa)));
}
//中心點的左邊
for (int i=first;i>-1;i--)
{
double aa = (first - i + 0.5) * a;
double ax = radius2 * Math.sin(aa);
double ay = radius2 - radius2 * Math.cos(aa);
AffineTransform transform = AffineTransform.getRotateInstance(-aa);//,x0 + ax, y0 + ay);
Font f2 = f.deriveFont(transform);
g.setFont(f2);
g.drawString(messages[i], (float)(x0 - ax - char_interval/2* Math.cos(aa)), (float)(y0 + ay + char_interval/2* Math.sin(aa)));
}
}
return buffImg;
}
}
相關文章
- GD 庫 PNG 透明底圖片新增文字及圖片水印
- IE6png圖片實現半透明的方法
- PNG圖片原理二三事
- 【學習圖片】06:PNG
- PNG圖片格式詳解
- Java實現emf轉jpg png 圖片轉換Java
- 區塊鏈電子印章應用研發區塊鏈
- png圖片怎麼轉換成jpg 電腦上怎麼把png格式改成jpg
- Java 將PDF轉為透明背景的圖片Java
- C++讀取一個png圖片資訊-[lenna.png]C++
- activiti 生成當前任務圖片PNG
- PHP pdf轉化為圖片(PNG)PHP
- 用PHP處理png圖片白色背景色改為透明色的例項程式碼PHP
- 完美解決IE中PNG格式透明背景圖片顯示異常的各種方法【Z】
- 電子商務圖片放大jqzoomOOM
- 在地圖上使圖片透明地圖
- c#圖片生成png格式和原圖不同C#
- Android 製作.9.png圖片Android
- android 9PNG圖片製作Android
- c# 透明png 寫入文字C#
- JavaScript WebGL 圖片透明處理JavaScriptWeb
- 圖片壓縮知識梳理(1) PNG 原理
- IE10與IMG圖片PNG顯示不了 WP中的WebBrowser中無法檢視PNG格式的圖片IE10Web
- 002.01 圖片移除背景成PNG檔案
- 光流.flo檔案生成.png圖片(可批量)
- Java 給Word新增印章Java
- 利用bitmap將圖片部分顏色透明
- 圖片壓縮知識梳理(2) 減小 PNG 大小
- 純前端實現 PNG 圖片壓縮 | UPNG.js前端JS
- Python 將Word轉換為JPG、PNG、SVG圖片PythonSVG
- IE6下Png透明最佳解決方案(推薦) Unit PNG Fix
- OCR文件識別:圖片快速轉換成電子文件
- 國辦:擴大電子證照應用領域,鼓勵各類主體開展電子簽名、電子印章社會化應用
- 使用javascript設定圖片的透明度JavaScript
- 用css使網頁圖片半透明(轉)CSS網頁
- 怎麼把Excel 表格轉成PNG、JPEG、GIF圖片格式 ?Excel
- PNG圖片壓縮原理解析--屌絲的眼淚
- png格式如何壓縮,圖片壓縮工具哪個好