最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用java代碼幫朋友P圖

 更新時間:2022年07月25日 11:52:12   作者:AnLingYi  
這篇文章主要為大家介紹了使用java代碼幫朋友P圖的實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

事件起因:當時有個朋友發(fā)了張圖片給我,讓我給他P圖,說是讓我給他把自己的微信付款碼給P上去,我覺得也挺有意思的,就給他P了,這一P就一發(fā)不可收拾了,天天都有人來找我P這圖。

想了下,能有什么問題難倒咱們程序員呢?這不就想出來了用代碼實現(xiàn)圖片合成嘛,哈哈哈~

先去微信那里生成微信收款碼(收付款 -> 二維碼收款 -> 保存收款碼),然后上傳,接著選擇你的設(shè)備,安卓手機選安卓,蘋果手機選蘋果,最后點擊開始合成即可。

準備階段

原圖(來源于網(wǎng)絡(luò))

PS處理后的模板圖

待合成圖片

圖片合成

基本步驟

  • 讀取模板圖和待合成圖,調(diào)整待合成圖的尺寸、旋轉(zhuǎn)角度、亮度、對比度;
  • 創(chuàng)建一個與模板圖尺寸一致的空白圖像;
  • 創(chuàng)建 Graphics2D 對象,通過 Graphics2D 對象的 drawImage() 方法將待合成圖和模板圖繪制進空白圖像的指定位置(需要注意圖層順序,先繪制待合成圖,后繪制模板圖);
  • 輸出空白圖像(合成后的圖像)到本地。

代碼

圖片尺寸調(diào)整、旋轉(zhuǎn)使用到了 Thumbnailator, 需添加 Maven 依賴

<dependency>
	<groupId>net.coobird</groupId>
	<artifactId>thumbnailator</artifactId>
	<version>0.4.8</version>
</dependency>
/**
 * 橫坐標
 */
private static final int x = 457;
/**
 * 縱坐標
 */
private static final int y = 295;
/**
 * 旋轉(zhuǎn)角度
 */
private static final double angle = 16;
/**
 * 縮放比例
 */
private static final double scale = 0.18;
/**
 * 圖片合成
 *
 * @param imagePath 待合成的圖片路徑
 * @param outPath 合成后的圖片輸出路徑
 * @throws IOException
 */
private static void synthesis(String imagePath, String outPath) throws IOException {
	// 模板圖
	BufferedImage template = ImageIO.read(new File("D:\\local\\images\\template.png"));
	// 待合成圖
	BufferedImage image = ImageIO.read(new File(imagePath));
	// 調(diào)整待合成圖的尺寸和旋轉(zhuǎn)角度
	image = Thumbnails.of(image).scale(scale).rotate(angle).asBufferedImage();
	// 合成后的圖
	BufferedImage result = new BufferedImage(template.getWidth(), template.getHeight(), template.getType());
	Graphics2D graphics2D = result.createGraphics();
	// 先畫待合成圖,后畫模板圖,這樣就能將待合成圖放置在模板圖的下層
	graphics2D.drawImage(image, x, y, null);
	graphics2D.drawImage(template,0,0, null);
	graphics2D.dispose();
	ImageIO.write(result, "png", new File(outPath));
}

運行代碼

public static void main(String[] args) throws IOException {
	synthesis("D:\\local\\images\\weixin_payment_code.png", "D:\\local\\images\\result.png");
}

調(diào)整圖片亮度、對比度

/**
 * 調(diào)整亮度、對比度
 *
 * @param image
 */
private static void adjustBrightnessAndContrast(BufferedImage image) {
	int width = image.getWidth();
	int height = image.getHeight();
	for (int x = 0; x < width; x++) {
		for (int y = 0; y < height; y++) {
			Color color = new Color(image.getRGB(x, y));
			int red = calculateColor(color.getRed());
			int green = calculateColor(color.getGreen());
			int blue = calculateColor(color.getBlue());
			color = new Color(red, green, blue);
			image.setRGB(x, y, color.getRGB());
		}
	}
}
/**
 * 亮度,取值范圍[-1,1]
 */
private static final double BRIGHTNESS = 0;
/**
 * 對比度,取值范圍[-1,1]
 */
private static final double CONTRAST = -0.5;
/**
 * 計算亮度、對比度顏色值
 *
 * @param color 原顏色值
 * @return 返回計算后的顏色值
 */
private static int calculateColor(int color) {
	color = (int)((color - 127.5 * (1 - BRIGHTNESS)) * Math.tan((45 + 44 * CONTRAST) / 180 * Math.PI) + 127.5 * (1 + BRIGHTNESS));
	return getColor(color);
}
/**
 * 獲取范圍內(nèi)的顏色值,[0,255]
 *
 * @param color
 * @return
 */
private static int getColor(int color) {
	return color > 255 ? 255 : color < 0 ? 0 : color;
}

在處理待合成圖片的尺寸和旋轉(zhuǎn)角度后調(diào)用 adjustBrightnessAndContrast() 方法調(diào)整亮度和對比度

...
// 調(diào)整待合成圖的尺寸和旋轉(zhuǎn)角度
image = Thumbnails.of(image).scale(scale).rotate(angle).asBufferedImage();
// 調(diào)整待合成圖片的亮度、對比度
adjustBrightnessAndContrast(image);
...

重新運行代碼

以上就是用java代碼幫朋友P圖的詳細內(nèi)容,更多關(guān)于java代碼P圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Feign實現(xiàn)多文件上傳,Open?Feign多文件上傳問題及解決

    Feign實現(xiàn)多文件上傳,Open?Feign多文件上傳問題及解決

    這篇文章主要介紹了Feign實現(xiàn)多文件上傳,Open?Feign多文件上傳問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 深入剖析Java ReentrantLock的源碼

    深入剖析Java ReentrantLock的源碼

    ReentrantLock和Synchronized都是Java開發(fā)中最常用的鎖,與Synchronized這種JVM內(nèi)置鎖不同的是,ReentrantLock提供了更豐富的語義。本文就來深入剖析一下ReentrantLock源碼,需要的可以參考一下
    2022-11-11
  • SpringBoot 實戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法

    SpringBoot 實戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法

    本篇文章主要介紹了SpringBoot 實戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 詳解Java實現(xiàn)設(shè)計模式之責任鏈模式

    詳解Java實現(xiàn)設(shè)計模式之責任鏈模式

    責任鏈模式是一種行為設(shè)計模式,允許你將請求沿著處理鏈發(fā)送,然后處理者都可對其進行處理,完成后可以再將其傳遞給下一個處理者。下面將會舉例說明什么是責任鏈模式,責任鏈模式該如何使用
    2021-06-06
  • SpringBoot JVM參數(shù)調(diào)優(yōu)方式

    SpringBoot JVM參數(shù)調(diào)優(yōu)方式

    這篇文章主要介紹了SpringBoot JVM參數(shù)調(diào)優(yōu)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringMVC中的HandlerMappingIntrospector工具類詳解

    SpringMVC中的HandlerMappingIntrospector工具類詳解

    這篇文章主要介紹了SpringMVC中的HandlerMappingIntrospector工具類詳解,這是一個Spring MVC助手類,用于集合應(yīng)用所配置的HandlerMapping(url pattern和請求處理handler之間的映射)表,用于獲取針對某個請求的如下信息,需要的朋友可以參考下
    2023-12-12
  • openFeign服務(wù)之間調(diào)用保持請求頭信息處理方式

    openFeign服務(wù)之間調(diào)用保持請求頭信息處理方式

    這篇文章主要介紹了openFeign服務(wù)之間調(diào)用保持請求頭信息處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Intellij?IDEA?的maven項目通過Java代碼實現(xiàn)Jetty的Http服務(wù)器(推薦)

    Intellij?IDEA?的maven項目通過Java代碼實現(xiàn)Jetty的Http服務(wù)器(推薦)

    Jetty是一個輕量級的高度可擴展的基于 java的web服務(wù)器和servlet引擎,這篇文章主要介紹了Intellij?IDEA?的maven項目通過Java代碼實現(xiàn)?Jetty?的?Http服務(wù)器從而獲取到 Http 的 Get 和 Post 請求,需要的朋友可以參考下
    2022-07-07
  • Java 定時器的使用示例

    Java 定時器的使用示例

    這篇文章主要介紹了Java 定時器的使用,幫助大家更好的理解和使用Java time類,感興趣的朋友可以了解下
    2020-09-09
  • java項目導(dǎo)出為.exe執(zhí)行文件的方法步驟

    java項目導(dǎo)出為.exe執(zhí)行文件的方法步驟

    最近做了個項目,想要轉(zhuǎn)換成可執(zhí)行文件,那么java項目如何導(dǎo)出為.exe執(zhí)行文件,本文就介紹一下,主要使用jar2exe軟件,感興趣的可以了解一下
    2021-05-05

最新評論

红原县| 杨浦区| 封丘县| 平谷区| 固镇县| 宿州市| 青神县| 龙州县| 腾冲县| 汽车| 广丰县| 镇平县| 兰考县| 武城县| 曲阜市| 福清市| 和林格尔县| 红河县| 道孚县| 襄樊市| 军事| 苍梧县| 开化县| 汉沽区| 潼关县| 宁远县| 大连市| 陆丰市| 辉南县| 大足县| 乐陵市| 云林县| 隆回县| 佛教| 镇江市| 尼木县| 寿宁县| 伽师县| 章丘市| 五峰| 博兴县|