java awt生成簽名圖片如何消除鋸齒化
awt生成簽名圖片如何消除鋸齒化
項目場景
在一個線上互聯(lián)網(wǎng)醫(yī)院中,需要生成電子處方圖片,圖片里面會有醫(yī)生的手寫簽名。通過java.awt的Graphics2D方式來生成處方圖片,并將手寫簽名的圖片導(dǎo)入其中。
問題描述
但是在簽名圖片導(dǎo)入后,就可以看到明顯的鋸齒。
具體導(dǎo)入圖片代碼:
g2.drawImage(getImage("https://xx.jpg", 100, 50), WIDTH - (LEVEL_PADDING + 9 * contentFontSize + contentFontSize / 2) + 5, height - bottomLine - (contentFontSize + LINE_SPACING + 15) + 5,100, 50, null);
private static BufferedImage getImage(String url) {
if (Parameters.isEmpty(url)) return null;
BufferedImage read = null;
try {
url = url.replaceFirst("https", "http");
read = ImageIO.read(new URL(url));
return read;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
效果如下:

解決方案
修改代碼如下:
g2.drawImage(getImage("https://xx.jpg", 100, 50), WIDTH - (LEVEL_PADDING + 9 * contentFontSize + contentFontSize / 2) + 5, height - bottomLine - (contentFontSize + LINE_SPACING + 15) + 5, null);
/**
* 抗鋸齒處理
*
* @param url
* @return
*/
private static Image getImage(String url, int width, int height) {
if (Parameters.isEmpty(url)) return null;
BufferedImage read = null;
try {
url = url.replaceFirst("https", "http");
read = ImageIO.read(new URL(url));
return read.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
效果如下:

就是解決方法,可能還有更好的方法,需要繼續(xù)摸索,請多指教。
AWT,SWT縮小圖片消除鋸齒的平滑處理
在Java中縮小圖片很容易就得到一張很糟糕的圖片,上面滿是鋸齒和不清晰的線條,在Java EE中,我們通常使用Jmagick,Jmagick使用的是類C語言程序提供給Java的API接口,在網(wǎng)站中運行,效率較高,但是體積較大,程序復(fù)雜度也較高(相關(guān)下載安裝方式在各大網(wǎng)站上均有詳細敘述,不再此重復(fù))。如果不是特殊需要,不推薦在PC應(yīng)用程序中使用。
在PC應(yīng)用程序中,縮小一副圖片有好多方法
縮小一副圖片最常見的方法
- awt中Image.getScaledInstance方法
- swt中ImageData.ScaledTo方法
- PaintEvent.gc.drawImage方法
awt中,設(shè)置getScaledInstance方法的第三個參數(shù)為BufferedImage.SCALE_SMOOTH即可
swt中如果使用ScaledTo方法只能得到一副慘不忍睹的圖片
所以swt縮小圖片而不產(chǎn)生鋸齒的方法只有在PaintEvent.gc.drawImage方法上做文章
說了這么多,其實方法很簡單.....就是在drawImage之前,設(shè)置e.gc.setAdvanced(true);e.gc.setAntialias(SWT.ON);
: D
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring集成mybatis實現(xiàn)mysql數(shù)據(jù)庫讀寫分離
本文通過實例代碼給大家介紹了spring集成mybatis實現(xiàn)mysql數(shù)據(jù)庫讀寫分離,需要的朋友可以參考下2017-08-08
SpringBoot前后端json數(shù)據(jù)交互的全過程記錄
現(xiàn)在大多數(shù)互聯(lián)網(wǎng)項目都是采用前后端分離的方式開發(fā),下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端json數(shù)據(jù)交互的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-03-03
SpringBoot?+?layui?框架實現(xiàn)一周免登陸功能示例詳解
這篇文章主要介紹了SpringBoot+layui框架實現(xiàn)一周免登陸功能,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
intellij idea創(chuàng)建第一個動態(tài)web項目的步驟方法
這篇文章主要介紹了intellij idea創(chuàng)建第一個動態(tài)web項目的步驟方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Spring Boot2解決idea console 控制臺輸出亂碼的問題
這篇文章主要介紹了Spring Boot2解決idea console 控制臺輸出亂碼的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Mybatis下動態(tài)sql中##和$$的區(qū)別講解
今天小編就為大家分享一篇關(guān)于Mybatis下動態(tài)sql中##和$$的區(qū)別講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03

