/**
* 根据图片路径获取图片流+ 围栏渲染 动态设置图片大小,并以图片流的方式返回
* @param response
* @param filePath 文件路径 eg: E:\\datacenter\\zhqb_electronicfence\\zhqb_electronicfence\\106051260944084055\\wpy-001\\2\\20210413202127.jpg
* @param fenceArea 围栏坐标 [{"x":308.609375,"y":111},{"x":422.609375,"y":229},{"x":176.609375,"y":382},{"x":120.609375,"y":223}]
* @param scaleW 画布宽度 eg: 560
* @param scaleH 画布高度 eg: 450
* @throws ServletException
* @throws IOException
*/
@ApiOperation("根据图片路径获取图片流+ 围栏渲染")
@GetMapping("/getImageStreamAndSnclosure")
public void getImageStreamAndSnclosure(HttpServletResponse response,String filePath,@RequestParam(required = false)String fenceArea,int scaleW,int scaleH) throws ServletException, IOException {
log.info("getImageStreamAndSnclosure filePath: {},fenceArea: {}", filePath,fenceArea);
//原图的 BufferedImage
BufferedImage bufferImage1 = ImageIO.read(new FileInputStream(filePath));
//修改原图的 宽高
BufferedImage bufferImage2 = new BufferedImage(scaleW,scaleH, BufferedImage.TYPE_INT_ARGB);
bufferImage2.getGraphics().drawImage(bufferImage1, 0, 0, scaleW, scaleH, null); //画图
//给修改后的图片渲染 围栏
if(StringUtils.isNotEmpty(fenceArea)) {
List<LocationDTO> list = null;
try {
list = JSONArray.parseArray(fenceArea, LocationDTO.class);
//x轴坐标点
int[] xPoints = list.stream().mapToInt(k->k.getX()).toArray();
//y轴坐标点
int[] yPoints = list.stream().mapToInt(k->k.getY()).toArray();
//坐标点的个数
int nPoints = list.size();
Graphics canval = bufferImage2.getGraphics();
// 将基本的绘图强转为2D绘图
Graphics2D g2d = (Graphics2D) canval;
//设置笔画的粗细
g2d.setStroke(new BasicStroke(6f));
// 设置颜色
g2d.setColor(Color.decode("#FFFF00"));
//画围栏
g2d.drawPolygon(xPoints,yPoints,nPoints);
// 画图结束
g2d.dispose();
}catch (Exception e) {
log.error("fenceArea类型转换失败{}", e);
}
}
ImageIO.write(bufferImage2, "png", response.getOutputStream());
}
给图片添加围栏
最新推荐文章于 2024-07-18 10:05:07 发布