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

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

效果图

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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值