<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
事件起因:當時有個朋友發了張圖片給我,讓我給他P圖,說是讓我給他把自己的微信付款碼給P上去,我覺得也挺有意思的,就給他P了,這一P就一發不可收拾了,天天都有人來找我P這圖。
想了下,能有什麼問題難倒咱們程式設計師呢?這不就想出來了用程式碼實現圖片合成嘛,哈哈哈~
先去微信那裡生成微信收款碼(收付款 -> 二維條碼收款 -> 儲存收款碼),然後上傳,接著選擇你的裝置,安卓手機選安卓,蘋果手機選蘋果,最後點選開始合成即可。
原圖(來源於網路)
PS處理後的模板圖
待合成圖片
Graphics2D
物件,通過 Graphics2D
物件的 drawImage()
方法將待合成圖和模板圖繪製進空白影象的指定位置(需要注意圖層順序,先繪製待合成圖,後繪製模板圖);圖片尺寸調整、旋轉使用到了 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; /** * 旋轉角度 */ 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)); // 調整待合成圖的尺寸和旋轉角度 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"); }
/** * 調整亮度、對比度 * * @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); } /** * 獲取範圍內的顏色值,[0,255] * * @param color * @return */ private static int getColor(int color) { return color > 255 ? 255 : color < 0 ? 0 : color; }
在處理待合成圖片的尺寸和旋轉角度後呼叫 adjustBrightnessAndContrast()
方法調整亮度和對比度
... // 調整待合成圖的尺寸和旋轉角度 image = Thumbnails.of(image).scale(scale).rotate(angle).asBufferedImage(); // 調整待合成圖片的亮度、對比度 adjustBrightnessAndContrast(image); ...
重新執行程式碼
以上就是用java程式碼幫朋友P圖的詳細內容,更多關於java程式碼P圖的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45