1. 程式人生 > >java進行圖片合成以及寫入自定義字型

java進行圖片合成以及寫入自定義字型

由於工作需要做了一個利用java的Graphics2D進行圖片合成且在圖片上寫入自定義字型文字的小功能,
那就順便記錄一些痕跡,有什麼不好的地方請見諒
public static void main(String[] args){
    try {
        //建立畫布
BufferedImage image = new BufferedImage(480,270,BufferedImage.TYPE_INT_RGB);
        //背景圖(使用網路連結獲取)
BufferedImage background = ImageIO.read(new URL("http://.../background.png"
)); //頭像(使用本地路徑獲取) BufferedImage icon = ImageIO.read(new File("C:\\...\Desktop\\doctor.png")); //字型背景圖 BufferedImage fontBd = ImageIO.read(new URL("http://.../fontBd.png")); //開啟畫圖 Graphics2D graphics = image.createGraphics(); //把背景圖、頭像新增到畫布中 graphics.drawImage(background.getScaledInstance(480
,270,Image.SCALE_DEFAULT),0,0,null); graphics.drawImage(icon.getScaledInstance(180,227,Image.SCALE_DEFAULT),283,42,null); //寫入標題,標題引入自定義字型 Font font = FontUtils.getFont(1,40); graphics.setColor(Color.decode("#333333")); graphics.setFont(font); FontUtils.drawString("論標題的重要性
",20,105,6,graphics,40);//將字串按照自定義的間隔寫入,防止字型全部寫在同一個地方 //新增字型背景 graphics.drawImage(fontBd.getScaledInstance(doctorMessage.length()*17,35,Image.SCALE_DEFAULT),20,136,null); //寫入資訊 graphics.setFont(new Font("微軟雅黑", Font.BOLD, 17)); graphics.setColor(Color.white); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); //去字型銳化 graphics.drawString("陌陌 特級醫師", 32, 159); //寫入資訊 graphics.setFont(new Font("微軟雅黑", Font.PLAIN, 17)); graphics.setColor(Color.decode("#333333")); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); graphics.drawString("中南第二醫院 內外科", 20, 199); //關閉畫布創作 graphics.dispose(); //根據畫布內容生成圖片 ImageIO.write(image, "png", new File("C:\\.....\\Desktop\\j.png")); System.out.println("圖片生成完畢"); } catch (Exception ex) { System.out.println("error: "+ex.getMessage()); ex.printStackTrace(); } }

/**
 *  引入自定義的字型
* @param fontStyle 字型樣式
* @param fontSize  字型大小
* @return
*/
public static Font getFont(int fontStyle, float fontSize) {
    Font font = null;
    FileInputStream fileInputStream = null;
    String fontUrl = "";
    try {
        switch (fontStyle) {
            case 1:
                //文悅新青年體
fontUrl = "C:\\...\\Desktop\\youth.OTF";
                break;
            default:
                fontUrl = "C:\\...\\Desktop\\vagrom.otf";
                break;
        }
        fileInputStream = new FileInputStream(new File(fontUrl));
        Font tempFont = Font.createFont(Font.TRUETYPE_FONT,fileInputStream);
        font = tempFont.deriveFont(fontSize);
        GraphicsEnvironment ge = GraphicsEnvironment
                .getLocalGraphicsEnvironment();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            fileInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return font;
}
/**
 * 將字串按照自定義的間隔寫入
* @param str   目標字串
* @param x     寫入的位置的x* @param y     寫入的位置的y* @param rate  寫入間隔
* @param g     畫布
* @param fontSize  字型的大小
*/
public static void drawString(String str,int x,int y,int rate, Graphics2D g,int fontSize){
    String tempStr="";
    int tempx=x;
    int tempy=y;
    while (str.length()>0){
        tempStr=str.substring(0, 1);
        str=str.substring(1, str.length());
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        g.drawString(tempStr, tempx, tempy);
        tempx = tempx + fontSize - rate;
    }
}


效果圖:效果圖片

相關推薦

java進行圖片合成以及寫入定義字型

由於工作需要做了一個利用java的Graphics2D進行圖片合成且在圖片上寫入自定義字型文字的小功能,那就順便記錄一些痕跡,有什麼不好的地方請見諒public static void main(String[] args){ try { //建立畫布

Java 往TreeSet集合中儲存定義物件學生,按照學生的年齡進行排序。

Set:無序,不可以重複元素。|--HashSet:資料結構是雜湊表。執行緒是非同步的。保證元素唯一性的原理:判斷元素的hashCode值是否相同。如果相同,還會繼續判斷元素的equals方法,是否為true。|--TreeSet:可以對Set集合中的元素進行排序。底層資料

java微信網頁授權獲取使用者資訊以及JSSDK定義分享等功能

<span style="font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);">一個超級重要的類,簽名類忘記發源碼了:</span><pre name="code

Unity 進行曲線軌跡定義以及根據定義曲線軌跡運動

1. 當你需要相機鏡頭根據特定軌跡運動。或者一些AI的特定軌跡運動的時候。就可以用到下面的指令碼了 一下方法來自官方案例 直接程式碼嘍。你需要做的就是,複製到你的專案中。拖在指令碼上,你就知道他怎麼用了。 一共兩個指令碼,一個是自定義軌跡的,另一個是使物

Android使用Java程式碼設定selector或drawable,以及使用定義控制元件方式使用它

鎮樓圖~~! TextView再給個selecotor 這種東西不要太簡單,但是這種東西我不想重複去寫N個Selector ! so~ /** * 獲取Selector * @param normalDraw *

在Echarts 柱形圖的單擊事件中寫入定義的參數

cnblogs img ges == innerhtml .com echart 通過 code

Java企業微信開發_04_定義菜單

組裝 sys 測試 搜索 我們 測試類 ray 翻譯 請求 一、本節要點 1.菜單相關實體類的封裝 參考官方文檔中的請求包的內容,對菜單相關實體類進行封裝。 這裏需要格外註意的是,企業微信中請求包的數據是Json字符串格式的,而不是xml格式。關於json序列化的問題

表維護視圖 中變更日誌寫入定義日誌表

com 寫入 動作 blog 數據 loop nts 發的 pen SE54 輸入維護視圖: 菜單-》環境-》事件 添加事件1和2編輯器中寫入代碼: 事件1 點擊保存,會觸發,但是保存還沒有commit , SPAN { font-family: "Courier New"

Java類加載機制及定義加載器

加載過程 ESS inf 無需 應用 null import def nds   一:ClassLoader類加載器,主要的作用是將class文件加載到jvm虛擬機中。jvm啟動的時候,並不是一次性加載所有的類,而是根據需要動態去加載類,主要分為隱式加載和顯示加載。   隱

Spark2.10中使用累加器、注意點以及實現定義累加器

累加器(accumulator)是Spark中提供的一種分散式的變數機制,其原理類似於mapreduce,即分散式的改變,然後聚合這些改變。累加器的一個常見用途是在除錯時對作業執行過程中的事件進行計數。 累加器簡單使用 Spark內建的提供了Long和Double型別的累加器。下面是一個簡單的使

java合併圖片合成多張橫向或豎向

java圖片合併 多張橫向或豎向合成圖片 前言:工作遇到需要把圖片合成一張圖片,在進行截圖。也遇到了很多問題,遇到的坑也分享出來。 圖片擷取:https://blog.csdn.net/qq_34846877/article/details/81324779 需求:先合成多張圖片,然

java實現讀取系統日期並定義

java實現讀取系統日期並自定義 實現效果: 當前日期:2018年3月10日 星期六 修改後日期:2020年7月10日 星期五 import java.util.Calendar; public class Main { public static v

【vue】element實現el-table-column設定寬度百分比(%)以及插入定義內容

    <el-table       :data="tableData"       style="width: 100%"       stripe= "true"&g

caffe 網路模型檔案中的引數含義(top bottom lr_mult decay_mult)與模型編寫以及模型定義

文章目錄 基本概念 資料層 Convolution Layer Deconvolution 反捲積層 Batch Normalization 層 Polling Layer crop層 裁剪 全連線層

Unity通過圖片定義字型

通過匯入一張圖片到Unity,把圖片上的字元分割,再通過指令碼轉換為適用的字型檔案。 1.圖片處理 圖片: 處理: 2.編輯器擴充套件程式碼 /* *R0-V1.0 *Modify Date:2018-11-29 *Modifier:ZoJet *M

iOS-對圖片操作---新增到定義相簿

轉自:https://www.jianshu.com/p/7113c2c15e2c   圖片操作---新增到自定義相簿 實際上,自定義相簿中的圖片並不是實際的圖片,而是對系統【相機膠捲】這個相簿中的圖片進行一個引用,所以將圖片儲存到自定義相簿的第一步就是先儲存到系統的【相機膠捲

一對一視訊交友原始碼中關於圖片載入和部分定義控制元件的原始碼

有這麼一部分原始碼,他們不如音視訊採集、播放部分的原始碼顯得那麼重要,但他們的存在使頁面看起來更美觀流暢,他們就是: 一、關於圖片載入的一段程式碼: 1、載入原圖,即沒有壓縮、裁剪、變換之前的圖,保持了原圖的大小、尺寸和解析度。 public static void displaySou

JAVA:HashMap常用方法,對於定義類的儲存,原始碼分析

public static void main(String[] args) { //hashMap儲存結構為陣列+連結串列 //資料儲存方式為鍵值對 HashMap<String, Integer> hashMap = ne

Visual Studio進行Python程式設計(新增定義Python直譯器)

  這篇部落格主要介紹一下在Visual Studio下安裝python開發環境,在vs下配置python開發環境的部落格不少,但是都介紹的是使用vs提供的預設的python直譯器,很少有使用自己安裝的直譯器的文章,因此今天就稍作介紹 安裝Visual Studio   安裝vi

Web開發筆記 #08# Jackson組合多個物件的屬性構成JSON(以及新增定義屬性)

參考文件:https://github.com/FasterXML/jackson-databind 關於ObjectMapper的執行緒安全 截自官方文件: 組合多個物件的屬性構成JSON(以及新增自定義屬性) Code: import com.fasterxml.jackson.cor