java后台通过IO流访问图片(带压缩代码)让前端显示图片

业务需求是两个不同的web程序放在不同的服务器上,web程序A要访问到web程序B上传上来的文件显示到页面上,所以用到了这一个IO读取图片的接口

     Html代码

//html img标签 两种方式 一种直接写死在src里这种不太灵活  另一种通过js赋值src 效果是一样的


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;
	}
}

效果图(因为是项目中筛选出来的代码 所以没有直接的效果图 我选了能体现这个功能的图片):

java后台通过IO流访问图片(带压缩代码)让前端显示图片_第1张图片

以上代码就到这里,如果有什么问题,欢迎大牛指点,后台代码是我组长教我的

你可能感兴趣的:(java后台通过IO流访问图片(带压缩代码)让前端显示图片)