1. 程式人生 > >生成二維碼之後,給二維碼 上方新增文字(二)

生成二維碼之後,給二維碼 上方新增文字(二)

生完二維碼之後,獲取因為需求 我們需要 給二位嗎上方新增 一些文字之類的提示資訊: 如果 座位號什麼的;

           int fontStyle = 1; //字型風格
           int font = 24; //字型大小
           //用來存放帶有logo+文字的二維碼圖片
           String realPath2 = url+"/new/"+shopName+"/";
           String newImageWithText = realPath2+state+code+"newImg.jpg";//組合生成
           File files = new File(newImageWithText);//組合生成
           if (!files.getParentFile().exists())
               files.getParentFile().mkdirs();
           System.out.println(newImageWithText);
           //帶有logo的二維碼圖片
           String targetImage = path;//組合生成

           String text = "桌號: "+state+"-"+ code;//傳參

           //在二維碼下方新增文字(文字居中)
           pressText(text, newImageWithText, targetImage, fontStyle, Color.decode("#2d667a"), font) ;

呼叫 pressText()

 public static void pressText(String pressText, String newImg, String targetImg, int fontStyle, Color color, int fontSize) {

        //計算文字開始的位置
        //x開始的位置:(圖片寬度-字型大小*字的個數)/2
        int startX = (WIDTH-(fontSize*pressText.length()))/2 +30;
        //y開始的位置:圖片高度-(圖片高度-圖片寬度)/2
        int startY = HEIGHT-(HEIGHT-WIDTH)/2 - 270;

        try {
            File file = new File(targetImg);
            Image src = ImageIO.read(file);
            int imageW = src.getWidth(null);
            int imageH = src.getHeight(null);
            BufferedImage image = new BufferedImage(imageW, 350, BufferedImage.TYPE_INT_ARGB);//TYPE_INT_ARGB 背景為透明的
            Graphics g = image.createGraphics();
            g.drawImage(src, 0, imageH-210, imageW, imageH, null);
            g.setColor(color);
            g.setFont(new Font(null, fontStyle, fontSize));
            g.drawString(pressText, startX, startY);
            g.dispose();

            FileOutputStream out = new FileOutputStream(newImg);
            ImageIO.write(image, "JPEG", out);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(image);
            out.close();
            System.out.println("image press success");
        } catch (Exception e) {
            System.out.println(e);
        }

這樣就將文字和二維碼 組合在一起了,至於 放在那裡,修改

  int startX = (WIDTH-(fontSize*pressText.length()))/2 +30;
        //y開始的位置:圖片高度-(圖片高度-圖片寬度)/2
        int startY = HEIGHT-(HEIGHT-WIDTH)/2 - 270;
  g.drawImage(src, 0, imageH-210, imageW, imageH, null);

就好了