基于Graphics2D drawImage圖片失真的解決方案
Graphics2D drawImage圖片失真的解決
常規(guī)的寫(xiě)法
graphics.drawImage(originalBufferedImage, rectangle.x, rectangle.y, rectangle.width, rectangle.height, null);
優(yōu)化的寫(xiě)法
graphics.drawImage( originalBufferedImage.getScaledInstance(rectangle.width, rectangle.height, Image.SCALE_SMOOTH), rectangle.x, rectangle.y, null);
Graphics2D 圖片合成、圖片處理需注意的細(xì)節(jié)及踩過(guò)的坑
Graphics2D 2d https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html
圖片處理
首先畫(huà)布肯定是需要的,可以新建一個(gè)空白畫(huà)布,也可以以圖片做畫(huà)布。
BufferedImage bi = new BufferedImage(width,height,type); 2d = bi.createGraphics();
如果需要生成RGB格式,需要做如下配置
bi = 2d.getDeviceConfiguration().createCompatibleImage(width,height,Transparency.TRANSLUCENT);
注:參數(shù)width 和 height 要和是前面畫(huà)布的對(duì)應(yīng)。
Transparency透明度設(shè)置
畫(huà)圖 g.drawImage(img,x,y,width,hight);
注:參數(shù)x,y為圖片左上角坐標(biāo)
旋轉(zhuǎn)處理 AffineTransform atf.rotate(theta,x,y)
注:theta這兒的角度需要轉(zhuǎn)換成弧度數(shù)
x,y為旋轉(zhuǎn)中心坐標(biāo),圖片旋轉(zhuǎn)參考點(diǎn)為圖片的中心點(diǎn)
同時(shí)有偏移、縮放、旋轉(zhuǎn)操作時(shí),畫(huà)圖順序?yàn)椋嚎s放-->偏移-->旋轉(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、最需要注意的一點(diǎn)就是 在畫(huà)字體的時(shí)候 x,y坐標(biāo)為字體左左左左下角
2、旋轉(zhuǎn)中心可以通過(guò)獲取字體的行高和字字符串寬度對(duì)應(yīng)的api計(jì)算獲得
3、最好用同一包中的字體ttf。如果混用,圖片在處理縮放時(shí)會(huì)存在差異,即使用的字體類型、大小、樣式都一致,同樣可能會(huì)存在差異
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用maven創(chuàng)建web項(xiàng)目的方法步驟(圖文)
本篇文章主要介紹了使用maven創(chuàng)建web項(xiàng)目的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01開(kāi)放封閉原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了開(kāi)放封閉原則,開(kāi)放-封閉原則是面向?qū)ο笤O(shè)計(jì)的核心所在,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08spring?boot學(xué)習(xí)筆記之操作ActiveMQ指南
ActiveMQ是一種開(kāi)源的基于JMS規(guī)范的一種消息中間件的實(shí)現(xiàn),ActiveMQ的設(shè)計(jì)目標(biāo)是提供標(biāo)準(zhǔn)的,面向消息的,能夠跨越多語(yǔ)言和多系統(tǒng)的應(yīng)用集成消息通信中間件,這篇文章主要給大家介紹了關(guān)于spring?boot學(xué)習(xí)筆記之操作ActiveMQ指南的相關(guān)資料,需要的朋友可以參考下2021-11-11深入分析Spring Cloud 負(fù)載均衡器架構(gòu)選型
文章詳細(xì)介紹了OpenFeign的初始化和執(zhí)行流程,包括FeignClient注解、FeignClientsRegistrar類、FeignClientFactoryBean工廠類、Targeter接口及其實(shí)現(xiàn)等,感興趣的朋友一起看看吧2024-12-12springboot整合Nacos組件環(huán)境搭建和入門案例詳解(最新推薦)
本文介紹了Nacos的基礎(chǔ)概念、關(guān)鍵特性、專業(yè)術(shù)語(yǔ)和生態(tài)圈,如何在Windows環(huán)境下搭建Nacos單個(gè)服務(wù),以及如何整合SpringBoot2來(lái)使用Nacos進(jìn)行服務(wù)注冊(cè)和配置管理,感興趣的朋友一起看看吧2025-03-03Spring Boot通過(guò)Junit實(shí)現(xiàn)單元測(cè)試過(guò)程解析
這篇文章主要介紹了Spring Boot通過(guò)Junit實(shí)現(xiàn)單元測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Java調(diào)用Oracle存儲(chǔ)過(guò)程詳解
這篇文章主要介紹了Java調(diào)用Oracle存儲(chǔ)過(guò)程詳解的相關(guān)資料,需要的朋友可以參考下2017-02-02Springboot實(shí)現(xiàn)人臉識(shí)別與WebSocket長(zhǎng)連接的實(shí)現(xiàn)代碼
這篇文章主要介紹了Springboot實(shí)現(xiàn)人臉識(shí)別與WebSocket長(zhǎng)連接的實(shí)現(xiàn),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11