基于Graphics2D drawImage圖片失真的解決方案
Graphics2D drawImage圖片失真的解決
常規(guī)的寫法
graphics.drawImage(originalBufferedImage, rectangle.x, rectangle.y, rectangle.width, rectangle.height, null);
優(yōu)化的寫法
graphics.drawImage( originalBufferedImage.getScaledInstance(rectangle.width, rectangle.height, Image.SCALE_SMOOTH), rectangle.x, rectangle.y, null);
Graphics2D 圖片合成、圖片處理需注意的細節(jié)及踩過的坑
Graphics2D 2d https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html
圖片處理
首先畫布肯定是需要的,可以新建一個空白畫布,也可以以圖片做畫布。
BufferedImage bi = new BufferedImage(width,height,type); 2d = bi.createGraphics();
如果需要生成RGB格式,需要做如下配置
bi = 2d.getDeviceConfiguration().createCompatibleImage(width,height,Transparency.TRANSLUCENT);
注:參數(shù)width 和 height 要和是前面畫布的對應。
Transparency透明度設置
畫圖 g.drawImage(img,x,y,width,hight);
注:參數(shù)x,y為圖片左上角坐標
旋轉處理 AffineTransform atf.rotate(theta,x,y)
注:theta這兒的角度需要轉換成弧度數(shù)
x,y為旋轉中心坐標,圖片旋轉參考點為圖片的中心點
同時有偏移、縮放、旋轉操作時,畫圖順序為:縮放-->偏移-->旋轉
圖片抗鋸齒設置
2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALAS_ON);
或
image = image.getScaledInstance(width,height,BufferedImage.SCALE_SMOOTH) g.drawImage(image,x,y,observer)
字體處理
Graphics2D 處理字體的做法和處理圖片的大體一致
1、最需要注意的一點就是 在畫字體的時候 x,y坐標為字體左左左左下角
2、旋轉中心可以通過獲取字體的行高和字字符串寬度對應的api計算獲得
3、最好用同一包中的字體ttf。如果混用,圖片在處理縮放時會存在差異,即使用的字體類型、大小、樣式都一致,同樣可能會存在差異
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用maven創(chuàng)建web項目的方法步驟(圖文)
本篇文章主要介紹了使用maven創(chuàng)建web項目的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01springboot整合Nacos組件環(huán)境搭建和入門案例詳解(最新推薦)
本文介紹了Nacos的基礎概念、關鍵特性、專業(yè)術語和生態(tài)圈,如何在Windows環(huán)境下搭建Nacos單個服務,以及如何整合SpringBoot2來使用Nacos進行服務注冊和配置管理,感興趣的朋友一起看看吧2025-03-03Spring Boot通過Junit實現(xiàn)單元測試過程解析
這篇文章主要介紹了Spring Boot通過Junit實現(xiàn)單元測試過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-01-01Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn)代碼
這篇文章主要介紹了Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11