1. 程式人生 > >java後臺通過IO流訪問圖片(帶壓縮程式碼)讓前端顯示圖片

java後臺通過IO流訪問圖片(帶壓縮程式碼)讓前端顯示圖片

業務需求是兩個不同的web程式放在不同的伺服器上,web程式A要訪問到web程式B上傳上來的檔案顯示到頁面上,所以用到了這一個IO讀取圖片的介面

     Html程式碼

//html img標籤 兩種方式 一種直接寫死在src裡這種不太靈活  另一種通過js賦值src 效果是一樣的
<img class="image jsyysglimg"  src="" height="120" alt="" id="ZP">
<img class="image jsyysglimg"  src="http://localhost:8080/text/manage/query_pic?dz=E:/upload/indexfile/52b77290-0993-4a4d-b60c-2572953f2cc8.jpg" height="120" alt="" id="ZP2">
<script>
    //將想同部分寫在一起,可以少寫重複程式碼 
    var photoPath =  "http://localhost:8080/text/manage/query_pic?";
    //dz就是圖片的地址
    $("#ZP").attr("src", photoPath + "dz=E:/upload/indexfile/52b77290-0993-4a4d-b60c-2572953f2cc8.jpg");
</script>

JAVA程式碼

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

@Controller
@RequestMapping(value = "/manage")
public class ManageAction{
    /**
	 * 獲取圖片的方法
	 * @param request
	 * @param response
	 * @param dz 圖片地址
	 * @return
	 */
	@RequestMapping(value = "/query_pic")
	@ResponseBody
	public void query_pic(HttpServletRequest request,HttpServletResponse response,@RequestParam("dz") String dz) {
		try {
				File pf = new File(dz);
				if (!pf.exists()) {
					return;
				}
				double rate = 1; //rate是壓縮比率  1為原圖  0.1為最模糊
				int[] results = getImgWidth(pf);
				int widthdist = 0;
				int heightdist = 0;
				if (results == null || results[0] == 0 || results[1] == 0) {
					return;
				} else {
					widthdist = (int) (results[0] * rate);
					heightdist = (int) (results[1] * rate);
				}
				Image src = javax.imageio.ImageIO.read(pf);
				BufferedImage tag = new BufferedImage((int) widthdist, (int) heightdist,
						BufferedImage.TYPE_INT_RGB);

				tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0,
						null);
				ServletOutputStream fout = response.getOutputStream();
				ImageIO.write(tag, "jpg", fout);
				fout.close();
		} catch (Exception e) {
               //異常處理
		}
	}
    public static int[] getImgWidth(File file) {
		InputStream is = null;
		BufferedImage src = null;
		int result[] = { 0, 0 };
		try {
			is = new FileInputStream(file);
			src = javax.imageio.ImageIO.read(is);
			result[0] = src.getWidth(null); // 得到源圖寬
			result[1] = src.getHeight(null); // 得到源圖高
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
}

效果圖(因為是專案中篩選出來的程式碼 所以沒有直接的效果圖 我選了能體現這個功能的圖片):

效果圖

以上程式碼就到這裡,如果有什麼問題,歡迎大牛指點,後臺程式碼是我組長教我的