JAva画像塗布機能

3714 ワード


今日問題が発生しました.ユーザーが画像をアップロードするとき、一部の機密情報は画像上で編集する必要があります(機密情報を塗布します)
 
アップロード画像ユーザが塗った座標(左上隅に対応)を記録して矩形枠を描く
 
  
        String waterString = "_water";
        /**
         *                  ,         ,             
         * @param objName      
         * @param url     url 
         * @param waters         x,y,w,h|x,y,w,h (w            h     )
         * @return
         * @throws Exception
         */
    @RequestMapping(value = "/uploadimg")
    @ResponseBody
    public String upload2waterImg(String objName,String url , String waters) throws Exception {
        String picUrl = "error";
        InputStream iStream =  null; 
        ByteArrayOutputStream bos = null;
        ByteArrayInputStream bis = null;
        try {
            if(!StringUtils.isEmpty(url)&&!StringUtils.isEmpty(waters)){
                URL imgUrl = new URL(url);
                iStream = imgUrl.openStream();
                if(iStream!=null){
                    Image image = ImageIO.read(iStream);
                    int width_img = image.getWidth(null);
                    int height_img = image.getHeight(null);
                    BufferedImage bufferedImage = new BufferedImage(width_img, height_img, BufferedImage.TYPE_INT_RGB);
                    Graphics2D g = bufferedImage.createGraphics();
                    g.drawImage(image, 0, 0, width_img, height_img, null);
                    String[] water = StringUtils.split(waters, "\\|");
                    if(water!=null && water.length>0){
                        for(int i=0;i<water.length;i++){
                            String[] xy = StringUtils.split(water[i],",");
                            if(xy!=null && xy.length==4){
                                int x = Integer.parseInt(xy[0]);
                                int y = Integer.parseInt(xy[1]);
                                int w = Integer.parseInt(xy[2]);
                                int h = Integer.parseInt(xy[3]);
                                Rectangle2D.Float r1= new Rectangle2D.Float(x,y,w,h);//      
                                g.setColor(new Color(0x999999));   //     
                                g.fill(r1);  //           
                            }
                        }
                        g.dispose(); 
                    }
                    picUrl = objName+waterString;
                    bos = new ByteArrayOutputStream();
                    ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, bos);
                    bis = new ByteArrayInputStream(bos.toByteArray());
                    s3ServiceUtil.saveObject(picUrl, bis);
                }
            }
        } catch (Exception e) {
            picUrl = "error";
          
            log.error("/upload upResult = "+false+"/xxx",e);
        } finally {
            try {
                if (iStream != null) {
                    iStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (null != bos) {
                bos.close();
            }
            if (null != bis) {
                bis.close();
            }

            
        }
        return picUrl;
    }