您的位置:首页 > Web前端

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

2018-08-15 16:46 363 查看

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

     Html代码

[code]//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代码

[code]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;
}
}

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

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

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: