java微信小程序参数二维码生成带背景图加字体(无限生成)

摘要:
版本>3.0-rc5<HttpResponseres=httpClient.execute(httpGet);JSONObjectjsons=JSONObject.fromObject(结果);pipeline.sync();路径);map=newHashMap<returnnull;
需求 : 

         1,因为项目需求 ,生成数以万计的二维码    

    2 ,每个二维码带不同的参数 

    3,二维码有固定背景图  

         4 , 往生成图片上写入 字体和编号(动态 ) 

设计技术 :

   1,微信接口token ,nginx 缓存 

   2,二维码 图片定义 写字 

maven 

<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-jpeg</artifactId>
<version>3.0-rc5</version>
</dependency>

还有rt.jar 在你java安装文件的bin里面 

获取token信息 

public void GetUrl() throws ClientProtocolException,
	IOException {
		HttpGet httpGet = new HttpGet(
				"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
						+ Configure.getAppID() + "&secret="
						+ Configure.getSecret() );
		HttpClient httpClient = HttpClients.createDefault();
		HttpResponse res = httpClient.execute(httpGet);
		HttpEntity entity = res.getEntity();
		String result = EntityUtils.toString(entity, "UTF-8");
		JSONObject jsons = JSONObject.fromObject(result);
		String expires_in = jsons.getString("expires_in");
		
		//缓存
		if(Integer.parseInt(expires_in)==7200){
			//ok
			String access_token = jsons.getString("access_token");
			Jedis cache = new Jedis("127.0.0.1", 6379);
			System.out.println("access_token:"+access_token);
			Pipeline pipeline = cache.pipelined();
			pipeline.set("access_token", access_token);
			pipeline.expire("access_token", 7200);
			pipeline.sync();
		}else{
			System.out.println("出错获取token失败!");
		}
		
	}

  获取二维码 信息图片 

    public String GetPostUrl(String access_token,String id) throws Exception {
          //String result = HttpRequest.sendPost("http://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token, path);
        System.out.println(id);
        String url ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=";
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("path", "pages/index/index?###="+id);//你二维码中跳向的地址
         map.put("width", "430");//图片大小
         JSONObject json = JSONObject.fromObject(map);
         System.out.println(json);
        String  res= HttpClientConnectionManager.httpPostWithJSON(url
                     + access_token, json.toString(),id);
         System.out.println(res);
        return null;
    }

返回图片保存 ,根据 id 

public static String httpPostWithJSON(String url, String json,String id)
                throws Exception {
            String result = null;
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
      
            StringEntity se = new StringEntity(json);
            se.setContentType("application/json");
            se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                            "UTF-8"));
            httpPost.setEntity(se);
            // httpClient.execute(httpPost);
            HttpResponse response = httpClient.execute(httpPost);
            if (response != null) {
                HttpEntity resEntity = response.getEntity();
                if (resEntity != null) {
                        InputStream instreams = resEntity.getContent(); 
                        String uploadSysUrl = "D://erweima/";
                        File saveFile = new File(uploadSysUrl+id+".png");
                           // 判断这个文件(saveFile)是否存在
                           if (!saveFile.getParentFile().exists()) {
                               // 如果不存在就创建这个文件夹
                               saveFile.getParentFile().mkdirs();
                           }
                    saveToImgByInputStream(instreams, uploadSysUrl, id+".png");
                }
            }
            httpPost.abort();
            return result;
        } 
         
        /* @param instreams 二进制流
    * @param imgPath 图片的保存路径
    * @param imgName 图片的名称
    * @return
    *      1:保存正常
    *      0:保存失败
    */
   public static int saveToImgByInputStream(InputStream instreams,String imgPath,String imgName){
  
       int stateInt = 1;
       if(instreams != null){
           try {
               File file=new File(imgPath+imgName);//可以是任何图片格式.jpg,.png等
               FileOutputStream fos=new FileOutputStream(file);
                    
               byte[] b = new byte[1024];
               int nRead = 0;
               while ((nRead = instreams.read(b)) != -1) {
                   fos.write(b, 0, nRead);
               }
               fos.flush();
               fos.close();                
           } catch (Exception e) {
               stateInt = 0;
               e.printStackTrace();
           } finally {
               try {
                instreams.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           }
       }
       return stateInt;
   }

然后是图片重合和增加字体

public void changeImage(String imageurl,String i ){
        try { 
//            InputStream imagein = new FileInputStream(
//                    "D:/systemAvatarNew1.png");
//            InputStream imagein2 = new FileInputStream(
//                    "D:/qqfile/1852230493/FileRecv/4-02.png");
            InputStream imagein = new FileInputStream(
                    "D:/systemAvatarNew1.png");
            InputStream imagein2 = new FileInputStream(
                    imageurl);

            BufferedImage image = ImageIO.read(imagein);
            BufferedImage image2 = ImageIO.read(imagein2); 
            //image2.getWidth() - 160, image2.getHeight() - 155,
            Graphics g = image.getGraphics();
            g.drawImage(image2, 300, 230, 410,422,null);
//            g.drawImage(image2, image.getWidth() - image2.getWidth() - 195,
//                    image.getHeight() - image2.getHeight() - 190,
//                     340,349,null);
            OutputStream outImage = new FileOutputStream(
                    imageurl);
            JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(outImage);
            enc.encode(image);
            
            
            BufferedImage bimg=ImageIO.read(new FileInputStream(imageurl));  
            //得到Graphics2D 对象  
            Graphics2D g2d=(Graphics2D)bimg.getGraphics();  
            //设置颜色和画笔粗细  
            g2d.setColor(Color.black);  
            g2d.setStroke(new BasicStroke(5));  
            //String pathString = "D://qqfile/1852230493/FileRecv/SourceHanSansCN-/SourceHanSansCN-Heavy.otf";
//            Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));
            
            g2d.setFont(new Font("微软雅黑", Font.PLAIN, 36));  
            //g2d.setFont(Loadfont.loadFont(pathString, 45));  
            //绘制图案或文字  
            g2d.drawString("编号: "+i, 320, 700);  
          //  g2d.drawString(i, 450, 700);    
            
            ImageIO.write(bimg, "JPG",new FileOutputStream(imageurl));
            
            
            File fromFile = new File(imageurl);  
            File toFile = new File(imageurl);  
            Image1 Image1 =new Image1();
            Image1.resizePng(fromFile, toFile, 1000, 1000, false);
            
               
            
            imagein.close();
            imagein2.close();
            outImage.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 接下来再 main方法里面跑一下 就ok ,如果是需要返回前台信息的,就直接记录地址,前台显示就可以了 

java微信小程序参数二维码生成带背景图加字体(无限生成)第1张

需要源码的可以加qq1852230493

免责声明:文章转载自《java微信小程序参数二维码生成带背景图加字体(无限生成)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java中abstract的用法页面不加载CSS解决办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OpenCV将两图片进行混合,达到两张图片合并成一张图片的效果

一、概述   案例:将两张图片混合成一张图片,并且原图的元素要保留到同一张图片中。 二、示例图片 1.混合后的图片 2.原始的两张图片   三、示例代码 //将两张图片进行混合 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using...

union 中null值合并原理

正常情况下null<>null 的,但是在union中如果有两个null值,那么只会显示一个。 1.null<>null  下例中可以看出null<>null SQL>  select * from dual; DU--X SQL> select * from dual where null=null; 未选...

MySQL设置主键字段自增从0001开始

DROP TABLE IF EXISTS `fi_kj_log_test`; CREATE TABLE `fi_kj_log_test` ( `id` bigint(4) unsigned zerofill NOT NULL AUTO_INCREMENT, `ts` bigint(20) DEFAULT NULL, `success` tiny...

富文本编辑器tinymce支持从word复制粘贴保留格式和图片的插件

图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码: //判断剪贴板的内容是否包含...

JPA实体类监听器@EntityListeners注解使用实例

被@Prepersist注解的方法 ,完成save之前的操作。被@Preupdate注解的方法 ,完成update之前的操作。被@PreRemove注解的方法 ,完成remove之前的操作。被@Postpersist注解的方法 ,完成save之后的操作。被@Postupdate注解的方法 ,完成update之后的操作。被@PostRemovet注解的方法...

python 识别登录验证码图片功能的实现代码(完整代码)

在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记。 首选导入一些用到的库,re、Image、pytesseract、selenium、time import re # 用于正则 from PIL import Image # 用于打开图片和对图片...