基于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 要和是前面畫布的對應(yīng)。
Transparency透明度設(shè)置
畫圖 g.drawImage(img,x,y,width,hight);
注:參數(shù)x,y為圖片左上角坐標
旋轉(zhuǎn)處理 AffineTransform atf.rotate(theta,x,y)
注:theta這兒的角度需要轉(zhuǎn)換成弧度數(shù)
x,y為旋轉(zhuǎn)中心坐標,圖片旋轉(zhuǎn)參考點為圖片的中心點
同時有偏移、縮放、旋轉(zhuǎn)操作時,畫圖順序為:縮放-->偏移-->旋轉(zhuǎn)
圖片抗鋸齒設(shè)置
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、旋轉(zhuǎn)中心可以通過獲取字體的行高和字字符串寬度對應(yīng)的api計算獲得
3、最好用同一包中的字體ttf。如果混用,圖片在處理縮放時會存在差異,即使用的字體類型、大小、樣式都一致,同樣可能會存在差異
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用maven創(chuàng)建web項目的方法步驟(圖文)
本篇文章主要介紹了使用maven創(chuàng)建web項目的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01spring?boot學(xué)習(xí)筆記之操作ActiveMQ指南
ActiveMQ是一種開源的基于JMS規(guī)范的一種消息中間件的實現(xiàn),ActiveMQ的設(shè)計目標是提供標準的,面向消息的,能夠跨越多語言和多系統(tǒng)的應(yīng)用集成消息通信中間件,這篇文章主要給大家介紹了關(guān)于spring?boot學(xué)習(xí)筆記之操作ActiveMQ指南的相關(guān)資料,需要的朋友可以參考下2021-11-11深入分析Spring Cloud 負載均衡器架構(gòu)選型
文章詳細介紹了OpenFeign的初始化和執(zhí)行流程,包括FeignClient注解、FeignClientsRegistrar類、FeignClientFactoryBean工廠類、Targeter接口及其實現(xiàn)等,感興趣的朋友一起看看吧2024-12-12springboot整合Nacos組件環(huán)境搭建和入門案例詳解(最新推薦)
本文介紹了Nacos的基礎(chǔ)概念、關(guān)鍵特性、專業(yè)術(shù)語和生態(tài)圈,如何在Windows環(huán)境下搭建Nacos單個服務(wù),以及如何整合SpringBoot2來使用Nacos進行服務(wù)注冊和配置管理,感興趣的朋友一起看看吧2025-03-03Spring Boot通過Junit實現(xiàn)單元測試過程解析
這篇文章主要介紹了Spring Boot通過Junit實現(xiàn)單元測試過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn)代碼
這篇文章主要介紹了Springboot實現(xiàn)人臉識別與WebSocket長連接的實現(xiàn),本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11