给图片添加围栏

/**
	 * 根据图片路径获取图片流+ 围栏渲染 动态设置图片大小,并以图片流的方式返回
	 * @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());    
	}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值