日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java获取服务器上的图片进行拼接

發布時間:2024/10/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java获取服务器上的图片进行拼接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.從服務器下載圖片保存到本地

package com.example.demo.util;import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection;public class Piccopy {public static void main(String[] args) throws Exception {String path1 = "http://192.168.1.105:8080/test/WJ/20200514/22.jpg";String filename = "2.jpg";String savePath="D:\\image\\";download(path1,filename,savePath);} public static int download(String urlString, String filename, String savePath) throws Exception {// 構造URLURL url = new URL(urlString);// 打開連接URLConnection con = url.openConnection();// 判斷圖片是否在服務器上存在String message = con.getHeaderField(0);if (StringUtils.hasText(message) && message.startsWith("HTTP/1.1 404")) {// 不存在System.out.println("圖片在服務器上不存在");return 0;} else {// 存在// 設置請求超時為5scon.setConnectTimeout(5 * 1000);// 輸入流InputStream is = con.getInputStream();// 1K的數據緩沖byte[] bs = new byte[1024];// 讀取到的數據長度int len;// 輸出的文件流File sf = new File(savePath);if (!sf.exists()) {sf.mkdirs();}OutputStream os = new FileOutputStream(sf.getPath() + "\\" + filename);// 開始讀取while ((len = is.read(bs)) != -1) {os.write(bs, 0, len);}// 完畢,關閉所有鏈接os.close();is.close();return 1;}} }

2.拼接圖片

import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL;import javax.imageio.ImageIO;/*** 該類實現了圖片的合并功能,可以選擇水平合并或者垂直合并。* 當然此例只是針對兩個圖片的合并,如果想要實現多個圖片的合并,只需要自己實現方法 BufferedImage* mergeImage(BufferedImage[] imgs, boolean isHorizontal)即可;* 而且這個方法更加具有通用性,但是時間原因不實現了,方法和兩張圖片實現是一樣的*/public class ImageMerge {/*** @param fileUrl* 文件絕對路徑或相對路徑* @return 讀取到的緩存圖像* @throws IOException* 路徑錯誤或者不存在該文件時拋出IO異常*/public static BufferedImage getBufferedImage(String fileUrl)throws IOException {File f = new File(fileUrl);return ImageIO.read(f);}/*** 遠程圖片轉BufferedImage* @param destUrl 遠程圖片地址* @return*/public static BufferedImage getBufferedImageDestUrl(String destUrl) {HttpURLConnection conn = null;BufferedImage image = null;try {URL url = new URL(destUrl);conn = (HttpURLConnection) url.openConnection();if (conn.getResponseCode() == 200) {image = ImageIO.read(conn.getInputStream());return image;}} catch (Exception e) {e.printStackTrace();} finally {conn.disconnect();}return image;}/*** 輸出圖片** @param buffImg* 圖像拼接疊加之后的BufferedImage對象* @param savePath* 圖像拼接疊加之后的保存路徑*/public static void generateSaveFile(BufferedImage buffImg, String savePath) {int temp = savePath.lastIndexOf(".") + 1;try {File outFile = new File(savePath);if(!outFile.exists()){outFile.createNewFile();}ImageIO.write(buffImg, savePath.substring(temp), outFile);System.out.println("ImageIO write...");} catch (IOException e) {e.printStackTrace();}}/**** @Title: 構造圖片* @Description: 生成水印并返回java.awt.image.BufferedImage* @param buffImg* 源文件(BufferedImage)* @param waterImg* 水印文件(BufferedImage)* @param x* 距離右下角的X偏移量* @param y* 距離右下角的Y偏移量* @param alpha* 透明度, 選擇值從0.0~1.0: 完全透明~完全不透明* @return BufferedImage* @throws IOException*/public static BufferedImage overlyingImage(BufferedImage buffImg, BufferedImage waterImg, int x, int y, float alpha) throws IOException {// 創建Graphics2D對象,用在底圖對象上繪圖Graphics2D g2d = buffImg.createGraphics();int waterImgWidth = waterImg.getWidth();// 獲取層圖的寬度int waterImgHeight = waterImg.getHeight();// 獲取層圖的高度// 在圖形和圖像中實現混合和透明效果g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));// 繪制g2d.drawImage(waterImg, x, y, waterImgWidth, waterImgHeight, null);g2d.dispose();// 釋放圖形上下文使用的系統資源return buffImg;}/*** 待合并的兩張圖必須滿足這樣的前提,如果水平方向合并,則高度必須相等;如果是垂直方向合并,寬度必須相等。* mergeImage方法不做判斷,自己判斷。** @param img1* 待合并的第一張圖* @param img2* 帶合并的第二張圖* @param isHorizontal* 為true時表示水平方向合并,為false時表示垂直方向合并* @return 返回合并后的BufferedImage對象* @throws IOException*/public static BufferedImage mergeImage(BufferedImage img1,BufferedImage img2, boolean isHorizontal) throws IOException {int w1 = img1.getWidth();int h1 = img1.getHeight();int w2 = img2.getWidth();int h2 = img2.getHeight();// 從圖片中讀取RGBint[] ImageArrayOne = new int[w1 * h1];ImageArrayOne = img1.getRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 逐行掃描圖像中各個像素的RGB到數組中int[] ImageArrayTwo = new int[w2 * h2];ImageArrayTwo = img2.getRGB(0, 0, w2, h2, ImageArrayTwo, 0, w2);// 生成新圖片BufferedImage DestImage = null;if (isHorizontal) { // 水平方向合并DestImage = new BufferedImage(w1+w2, h1, BufferedImage.TYPE_INT_RGB);DestImage.setRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 設置上半部分或左半部分的RGBDestImage.setRGB(w1, 0, w2, h2, ImageArrayTwo, 0, w2);} else { // 垂直方向合并DestImage = new BufferedImage(w1, h1 + h2, BufferedImage.TYPE_INT_RGB);DestImage.setRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 設置上半部分或左半部分的RGBDestImage.setRGB(0, h1, w2, h2, ImageArrayTwo, 0, w2); // 設置下半部分的RGB}return DestImage;}/*** Java 測試圖片疊加方法*/public static void overlyingImageTest() {String sourceFilePath = "D://test//test1.jpg";String waterFilePath = "D://test//test2.jpg";String saveFilePath = "D://test//overlyingImageNew.jpg";try {BufferedImage bufferImage1 = getBufferedImage(sourceFilePath);BufferedImage bufferImage2 = getBufferedImage(waterFilePath);// 構建疊加層BufferedImage buffImg = overlyingImage(bufferImage1, bufferImage2, 0, 0, 1.0f);// 輸出水印圖片generateSaveFile(buffImg, saveFilePath);} catch (IOException e) {e.printStackTrace();}}/*** Java 測試圖片合并方法*/public static void imageMargeTest() {// 讀取待合并的文件BufferedImage bi1 = null;BufferedImage bi2 = null;// 調用mergeImage方法獲得合并后的圖像BufferedImage destImg = null;System.out.println("下面是垂直合并的情況:");String saveFilePath = "D:\\image\\22.jpg";String divingPath = "D:\\image\\22.jpg";String margeImagePath = "D:\\image\\22new.jpg";try {bi1 = getBufferedImage(saveFilePath);bi2 = getBufferedImage(divingPath);// 調用mergeImage方法獲得合并后的圖像destImg = mergeImage(bi1, bi2, false);} catch (IOException e) {e.printStackTrace();}// 保存圖像generateSaveFile(destImg, margeImagePath);System.out.println("垂直合并完畢!");}public static void main(String[] args) {// 測試圖片的疊加overlyingImageTest();// 測試圖片的垂直合并imageMargeTest();}}

?

總結

以上是生活随笔為你收集整理的java获取服务器上的图片进行拼接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。