用java实现在微信里面生成带二维码的海报

接着说上篇的内容用java实现在微信里面生成带二维码的海报_第1张图片

我们生成二维码以后,需要的就是把原来海报最为背景图,在固定的地方把二维码换掉。

public static void exportImg2(File phone,File headImg,File imgs){  
        try {  
            //1.jpg是你的 主图片的路径  
            InputStream is = new FileInputStream(imgs);  
            //通过JPEG图象流创建JPEG数据流解码器 
            JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);  
            //解码当前JPEG数据流,返回BufferedImage对象  
            BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();  
            //得到画笔对象  
            Graphics g = buffImg.getGraphics();  
              
            //创建你要附加的图象。  
            //小图片的路径  
            ImageIcon imgIcon = new ImageIcon(headImg.getPath());   
              
            //得到Image对象。  
            Image img = imgIcon.getImage();  
              
            //将小图片绘到大图片上。  
            //5,300 .表示你的小图片在大图片上的位置。  
            g.drawImage(img,400,800,null);  
//            g.drawImage(img,400,440,null);
              
            //设置颜色。  
            g.setColor(Color.BLACK);  
              
              
            //最后一个参数用来设置字体的大小,这是用来在海报上面写上字的方法  
           /* Font f = new Font("宋体",Font.PLAIN,30); 
            Color mycolor = Color.white;//new Color(0, 0, 255);  
            g.setColor(mycolor);  
            g.setFont(f);*/
              
            //10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。  
//            g.drawString(username,180,894);  
            
          //创建你要附加的图象。  
            //小图片的路径  
            ImageIcon imgIconPhone = new ImageIcon(phone.getPath());   
              
            //得到Image对象。  
            Image imgPhone = imgIconPhone.getImage();  
              
            //将小图片绘到大图片上。  
            //5,300 .表示你的小图片在大图片上的位置。  
            g.drawImage(imgPhone,172,866,null);  
//            g.drawImage(img,400,440,null);
              
            //设置颜色。  
            g.setColor(Color.BLACK);  
            
            g.dispose();
            
            OutputStream os;  
          
            os = new FileOutputStream(imgs);  
//            String shareFileName = "\\upload\\" + System.currentTimeMillis() + ".jpg";  
//            os = new FileOutputStream(shareFileName);  
             //创键编码器,用于编码内存中的图象数据。            
            JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);  
            en.encode(buffImg);           
              
            is.close();  
            os.close();  
        } catch (FileNotFoundException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (ImageFormatException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }

    }

可以根据海报大小的不同和二维码的不同,来调节位置方向。

我实现的方法是将原海报背景放在服务器上,然后根据不同的信息源,生成不同的二维码,每次请求不同,然后替换掉原来位置的二维码就好了。

既然要在微信端展示给客户,那么肯定要上传到微信的服务器上的。

String qrcodename = new Date().getTime()+"";
                    QRCode test = new QRCode();
                String filePostfix="jpg";
                File file = new File("/root/u1/"+qrcodename+"."+filePostfix);
                file.createNewFile();
                File file2 = new File("/root/u1/1.jpg");

               

                                                                                //生成二维码的方法

                test.encode("https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx3cd583b167fa2e75&redirect_uri=地址"&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect", file,filePostfix, BarcodeFormat.QR_CODE, 170, 170, null);
                File file3 = new File("/root/u1/phoneCont/5.jpg");
                QRCode.exportImg2(file3,file, file2);
                //将文件上传到服务器
                JSONObject obj = uploadMedia(file2, 获取到微信的token, "image");

                //数据库创建了一个类,用来保存

                Qrcode qrcode = new Qrcode();
                qrcode.setCode(qrcodename);
                qrcode.setCtime(new Date());
                qrcode.setMid(wuList.get(0).getMid());
                qrcode.setStatus(0);
                qrcode.setMediaId(obj.get("media_id").toString());
                qrcode.setType("2");
                db.save(qrcode);
            

                return 将图片转成xml;

public static JSONObject uploadMedia(File file, String token, String type) {
        if(file==null||token==null||type==null){
            return null;
        }


        if(!file.exists()){
            System.out.println("上传文件不存在,请检查!");
            return null;
        }


        String url = "https://api.weixin.qq.com/cgi-bin/material/add_material";
        JSONObject jsonObject = null;
        PostMethod post = new PostMethod(url);
        post.setRequestHeader("Connection", "Keep-Alive");
        post.setRequestHeader("Cache-Control", "no-cache");
        FilePart media = null;
        HttpClient httpClient = new HttpClient();
        //信任任何类型的证书
        /*Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443); 
        Protocol.registerProtocol("https", myhttps);*/


        try {
            media = new FilePart("media", file);
            Part[] parts = new Part[] { new StringPart("access_token", token),
                    new StringPart("type", type), media };
            MultipartRequestEntity entity = new MultipartRequestEntity(parts,
                    post.getParams());
            post.setRequestEntity(entity);
            int status = httpClient.executeMethod(post);
            if (status == HttpStatus.SC_OK) {
                String text = post.getResponseBodyAsString();
                System.out.println(text+"-------------------");
                jsonObject = JSONObject.parseObject(text);
            } else {
            System.out.println("upload Media failure status is:" + status);
                
            }
        } catch (FileNotFoundException execption) {


            execption.printStackTrace();
        } catch (HttpException execption) {
        execption.printStackTrace();
        } catch (IOException execption) {
        execption.printStackTrace();
        }
        return jsonObject;
    }

你可能感兴趣的:(java微信开发)