Java图片、水印、文字的合成(图片只限于JPG的图片)

<!-先创建文件夹,以便图片存放-!>

private void newFolder(String folderPath) {

     String filePath = folderPath;
     filePath = filePath.toString(); //指定路径的建文件夹
     java.io.File myFilePath = new java.io.File(filePath);
     try {
          if (myFilePath.isDirectory()) {  //已经存在
                System.out.println("该文件目录已经存在");
          } else {
              myFilePath.mkdir();  //建立文件夹
           }
         } catch (Exception e) {
            e.printStackTrace();
         }
 }

 

注: 若要建多层次的文件夹,必须一次一次的建,此方法不支持一次性建完。

 

 

二:目录建好后,文字图片合成

    public String ImageMoneyVsName(String Name,Long Money,String url,Long shopCode) {
        try {
            // 读取模板图片内容
            JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream(url);  //读取图片路径
            BufferedImage image = decoder.decodeAsBufferedImage();
            Graphics2D g = image.createGraphics();// 得到图形上下文
            g.setColor(Color.BLACK); // 设置画笔颜色
            RenderingHints rh = new RenderingHints( RenderingHints.KEY_ANTIALIASING,                                                    RenderingHints.VALUE_ANTIALIAS_ON);
            rh.put(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
            rh.put(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
            rh.put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
            rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
            g.setRenderingHints(rh);
            g.setColor(Color.black);
            Font font = new Font("宋体", Font.BOLD, 12);
            g.setFont(font);
            FontMetrics fm = g.getFontMetrics(font); 

           //设置换行操作
            int fontHeight = fm.getHeight(); //字符的高度
            int offsetLeft = 16;  
            int rowIndex = 1;  
            for(int i=0;i<Name.length();i++){  
                char c = Name.charAt(i);  
                int charWidth = fm.charWidth(c); //字符的宽度  
                //另起一行  
                if(Character.isISOControl(c) || offsetLeft >= (171-charWidth)){  
                    rowIndex++;  
                    offsetLeft = 16;  
                }  
                g.drawString(String.valueOf(c), offsetLeft, rowIndex * fontHeight);   //把一个个写到图片上 
                offsetLeft += charWidth;   //设置下字符的间距
            }
            Font font1 = new Font("宋体", Font.BOLD, 16);
            g.setFont(font1);
            g.drawString("金额:"+Money+"元",50,65);//50代表以图片左上顶点为原点的宽度,65代表以图片左上顶点为原点的高度
            g.dispose();
            // 穿件客户文件夹
            String Folder=FileUtils.encrypt(shopCode);
            newFolder("S/");
            newFolder("S/"+ Folder);

            newFolder("S/"+ Folder+ "/"+"COUPON");  //分三级目录
//图片的名称(把当前的时间分离设置成图片的名字)

            String imgurl="S_"+String.valueOf(new Date().toLocaleString()).replace("_", "").replace(":", "").replace(" ", "").replace("-", "") + ".jpg"; 
            String outFileName ="S/" +Folder  + "/"+"COUPON"+"/" + imgurl;  //图片要存储的路径
            FileOutputStream out = new FileOutputStream(outFileName);//通过流操作把文字图片结合
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(image);
            out.close();
            return outFileName;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值