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

需求 : 

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 ,如果是需要返回前台信息的,就直接记录地址,前台显示就可以了

需要源码的可以加qq1852230493

时间: 2024-10-12 20:43:50

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

小程序参数二维码生成

总所周知,小程序无法分享到朋友圈,但是图片可以.只要小程序能生成包含信息与小程序参数二维码,即可达到很好的传播效果. 例:拉勾网. 基础知识准备 appid与appsecret "access_token"; 移步:微信官方文档 小程序二维码生成接口 有3个接口哦:小程序二维码文档 实现步骤 <?php $appid = $_POST["appid"]; // 获取appid $appsecret = $_POST["appsecret"]

小程序参数二维码自动生成

当小程序审核通过后,那么线上的小程序二维码是如何生成呢?芝麻小程序码提供了程序二维码生成工具. 网址如下 https://weixin.hotapp.cn 芝麻小程序码的特色 (1)支持小程序路径带参数,自定义带参数 (2)小程序码,方形小程序码,以及小程序码的美化 (3)支持创建带场景值的二维码 (4)支持小程序参数二维码的统计,统计扫码人数,扫码次数 原文地址:https://www.cnblogs.com/dodui/p/8443261.html

微信小程序生成二维码插件基于base64-weapp-qrcode.js

weapp-qrcode 微信小程序生成二维码的插件,基于base64编码输出二维码,不依赖canvas 详情demo可以去github上预览-weapp-qrcode.js https://github.com/Pudon/weapp-qrcode =.=,加个star那就更好了 PS: 主要在node-yaqrcode项目基础上进行改造适应微信小程序 说明 只需要在 wxml 文件中增加个image标签动态引用base64编码即可 <image src="{{qrcodeURL}&qu

微信小程序二维码识别

目前市场上二维码识别的软件或者网站越来越多,可是真正方便,无广告的却少之很少. 于是,自己突发奇想做了一个微信二维码识别的小程序. 包含功能: 1.识别二维码 ①普通二维码 ②条形码 ③只是复制解析出来的数据 2.生成二维码 ①只是从粘贴板生成二维码 软件截图: 体验二维码: 以下为主要代码 index.js // pages/main/index.js var QR = require("../../utils/qrcode.js"); Page({ data: { canvasHi

生成二维码(带背景)本地测试方法

public class QRCodeMax { //文字显示 private static final int QRCOLOR = 0x201f1f; // 二维码颜色:黑色 private static final int BGWHITE = 0xFFFFFF; //二维码背景颜色:白色 // 设置QR二维码参数信息 private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Objec

ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(goole)生的,QRCode就不用说了吧,虽说技术无国界,但是国人还是有点.... 好,言归正传,java用ZXi

(转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(gool

PHP生成小程序二维码

/** * [生成小程序二维码] * @return [type] [description] */ public function makeMiniQrcode_do() { begin: $id = input('id');// 获取token $ACCESS_TOKEN = $this->getAccesstoken(); // 准备进入小程序的参数 $param = json_encode(array("path" => "pages/shop/shop?

java 扫描微信公众号二维码,关注并登录逻辑

场景:户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: 系统生成带参数的临时二维码:参数 scene_str 自定义为唯一值(可以是uuid),临时二维码的生成方式参照官方接口的开发文档 用户使用微信扫描该二维码,关注后微信服务器会将关注事件的响应数据返回给我们的应用服务器:微信通过我们在公众号配置的“服务器地址(URL)”,将响应数据返回给我们的应用服务器,响应数据包括 参数 scene_str 和 openid 应用服务器将接收到的openid再次向微信服务器发起请