使用場景
需要Java語言動態生成圖片
用流程圖簡單說明下我這邊工作中使用的場景
僅供參考
所以這裡就需要生成證書了
我先給大家看下最終實現的圖片效果
這裡要先說明一下
圖片上的文字都是動態變化的即不同的訂單對應的圖片內容都不一樣
下面說下我是如何解決的
通過PhantomJS來實現這種方式是不能實現這個需求的
這個的原理就是對網頁截圖 但只能對於靜態頁面截圖 不能根據不同的參數值動態生成圖片
所以不提倡使用這種方式
但也介紹下這種使用方式 朋友們根據自己的實際需求情況有選擇的使用
通過html代碼實現圖片的效果 放入web容器(比如nginx)中部署這是h5代碼
test文件夾下面的內容安裝一個docker nginx將test文件夾加載到nginx容器的/usr/share/nginx/html目錄下面
docker run --name nginx80 -p 8000:80 -v /tmp/test:/usr/share/nginx/html -d docker.io/nginx訪問的頁面效果
訪問該頁面進行截圖這張圖片是截圖生成的圖片 但url中的id值並沒有傳給頁面
在h5代碼中請求後端接口獲取數據動態顯示出來也是不可以的
所以這種方式使用局限性很窄
簡單介紹下代碼原理大致原理是 通過http請求該url獲取該url的文件流然後解析h5代碼生成圖片
通過SVG模版動態生成先寫svg模版(其實也是h5代碼)讀取svg模版 動態傳入參數生成圖片其實現原理大致為 讀取svg document h5代碼 將動態參數map解析到h5代碼中 轉換成字節數組 生成圖片格式
Linux環境圖片中文亂碼我本地是mac系統沒有這個問題 在發布到測試環境linux系統出現了這個問題
先看下問題的現象
看到了沒 生成的圖片中文全是亂碼
原因是因為linux系統沒有中文字體
既然linux系統沒有中文字體 那麼就安裝它嘛 let's 盤它!!!
先看下mac環境的字體情況brew install fontconfigfc-list :lang=zh (注意『:』前的空格)mac環境默認會安裝很多中文字體
再看下linux環境yum -y install fontconfigfc-list :lang=zh果然沒有中文字體
開始安裝中文字體將mac環境的宋體上傳到linux環境a 先在mac系統中找到字體安裝目錄
/System/Library/Fontsb 找到宋體對應的文件
c 將該文件上傳到linux指定的目錄下
/usr/share/fonts/chinesed 賦予文件夾操作權限
chmod -R 755 /usr/share/fonts/chinesee 安裝ttmkfdir來搜索目錄中所有的字體信息,並匯總生成fonts.scale文件
yum -y install ttmkfdir
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
修改字體配置文件vi /etc/fonts/fonts.conf
添加
<dir>/usr/share/fonts/chinese</dir>
刷新內存中的字體緩存fc-cache
確認是否安裝成功在jdk中安裝該宋體a 找到jdk所在的安裝目錄
echo $JAVA_HOMEb 將宋體文件複製過來
cp /usr/share/fonts/chinese/STHeiti\ Light.ttc /usr/local/software/jdk1.8.0_141/jre/lib/fonts/fallback
fallback代表存放後備語言的文件夾
重啟java服務即可DEMO代碼https://gitee.com/pingfanrenbiji/resource/tree/master/image注意: 引入的依賴問題
<!--phantomjs -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.53.1</version>
</dependency>
<dependency>
<groupId>com.github.detro</groupId>
<artifactId>ghostdriver</artifactId>
<version>2.1.0</version>
</dependency>
<!--svg-->
<dependency>
<groupId>com.github.hui.media</groupId>
<artifactId>svg-core</artifactId>
<version>2.5</version>
</dependency>這些依賴jar包我是上傳到了公司的私服上了
若是朋友們下拉不下來
我提供給大家這些底層jar包的實現源碼
https://gitee.com/pingfanrenbiji/quick-media自行上傳到自己的私服即可