文档章节

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

第九程序
 第九程序
发布于 2017/07/11 10:12
字数 822
阅读 98
收藏 0
点赞 0
评论 0

java微信小程序参数二维码生成带背景图加字体开发教程:


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

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

   3,二维码有固定背景图 
   4 , 往生成图片上写入 字体和编号(动态 )

设计技术 :

 1,微信接口token ,nginx 缓存

  2,二维码 图片定义 写字

maven


com.twelvemonkeys.imageio 
imageio-jpeg 
3.0-rc5 

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

© 著作权归作者所有

共有 人打赏支持
第九程序
粉丝 84
博文 142
码字总数 172691
作品 0
厦门
程序员
调用腾讯优图开放平台进行人脸识别-Java调用API实现

人脸检测V3在线体验:http://123.207.12.111/xai/rest/face/index 第一步:鉴权服务技术方案 Java代码实现如下 需要的HMACSHA1代码及随机数代码...

小帅帅丶
2017/08/18
0
10
java实现微信小程序登录态维护

    相信不少喜欢开发的朋友都已经知道微信小程序是个什么物种了,楼主也是从小程序内测期间就开始关注,并且也写过几个已经上线的微信小程序。但是基本上都是写的纯前端,最近楼主从后端...

流浪的家猫
2017/09/30
0
0
编程微刊第四期文章汇总(2018.4)

编程微刊创立也有一段时间了,在此感谢一直关注我的小伙伴们,你们的关注和支持,是我每天不断更新的动力,我每个月会总结一期微刊,方便大家的阅读。 1. 推荐文章 这个时代,抛弃你的时候,...

祈澈姑娘
05/04
0
0
打造个人版微信小程序(1)——本地开发api接口调用

如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢。   从今天开始,开始打造一个个人版的微信小程序,尽早上线,方便大家使用以及技术讨论。这套小程序...

u013088062
05/01
0
0
Java实现带logo的二维码

Java实现带logo的二维码 二维码应用到生活的各个方面,会用代码实现二维码,我想一定是一项加分的技能。好了,我们来一起实现一下吧。 我们实现的二维码是基于QR Code的标准的,QR Code是由日...

奇迹迪
05/28
0
0
如何在cmd中编译和运行java源文件

如何在cmd中编译和运行java源文件 首先写一个名为HelloWorld.java的java源文件,存储在如C:/java/src的地址,我们再假设待会要存储的位置是C:/java/bin,则我们做一下工作 首先,进入cmd环境...

一念三千
2012/09/14
0
0
Java js 生成二维码 解析二维码

1.二维码分类   二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型。 线性堆叠式二维码 编码原理: 建立在一维条码基础之上,按需要堆积成两行或多行。 图示: 2. 矩阵...

haoyuehong
06/28
0
0
Android安全之---应用防dex2jar原理及实现

一、反编译某平台代码 最近在看某外卖平台的代码,发现某外卖平台最新版本版本无法正常的通过dex2jar工具将dex转换出Java源代码,在转换过程中会提示出错,如图: 查看转换出的Java源代码,会...

病已
2017/06/24
0
0
基于zxing生成与解析二维码、条形码

基于zxing(https://github.com/zxing/zxing)与maven,针对二维码(包括带图片的二维码)、条形码进行了简单的封装,以便在项目中更好的利用。 ZXing是一个开源Java类库用于解析多种格式的1D/...

cloud-coder
2014/03/17
0
0
Android平台利用ZXING生成二维码图片

zxing是google的一个开源二维码项目,目前基本上和二维码打交道的东西,都会用到它. 最近项目中用到了android手机需要根据提供的字符串生成二维码图片,之前用zxing做过二维码解码,编码还没做过...

xiahuawuyu
2012/04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python以太坊类库web3.py概览

python通过web3.py库与以太坊交互共同入口是web3对象。web3对象提供API接口,python开发应用与以太坊进行交互如钱包创建、支付、转账等连接JSON-RPC服务器进行。 Providers提供者 Providers使...

智能合约
刚刚
0
0
【Android学习笔记】设置App启动页

先将启动页放到项目资源中,图片一般是1080*1920的jpg。 新建一个activity,如图: 创建成功之后,打开刚刚创建的activity,来进行代码的编写: >>>阅读全文

全部原谅
2分钟前
0
0
什么是React-redux、为什么使用React-redux、怎么使用React-redux

1、什么是React-redux React-redux是用于连接React和Redux的 2、为什么使用React-redux 使用React-redux可以使redux部分代码更简洁更明了,比如组建中需要使用到的数据都在mapStateToProps方...

kimyeongnam
4分钟前
0
0
Spring核心——Stereotype组件与Bean扫描

在注解自动装载中介绍了通过注解(Annotation)自动向Bean中注入其他Bean的方法,本篇将介绍通过注解(Annotation)向容器添加Bean的方法。 Spring的核心容器提供了@Component和@Bean注解来标...

随风溜达的向日葵
5分钟前
0
0
利用世界杯,读懂 Python 装饰器

Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic。 今天就结合最近的世界杯带大家理解下装饰器。...

猫咪编程
8分钟前
0
0
flink fold example

flink fold例子 import org.apache.flink.api.common.functions.*;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.environment.S......

coord
9分钟前
0
0
c++ qt 组播总结

每个人都有不同的认知规律和习惯, 有的人喜欢搞一套严密的大理论, 论述起来滔滔不绝, 不管自己懂不懂, 反正读者/听者是没搞懂。 有的人喜欢从实践出发, 没看到代码, 不运行一下, 不看...

backtrackx
13分钟前
0
0
Sublime text2安装json格式化插件SublimePrettyJson[Windows]

一、下载SublimePrettyJson插件包 https://github.com/dzhibas/SublimePrettyJson 二、将下载的文件解压放到在package目录下面 C:\Users\lucky\AppData\Roaming\Sublime Text 3\Packages 每个......

lazy~
13分钟前
0
0
安装vue-cli 报4058错误

1. 4058是网络代理错误。 安装淘宝源修改一下就可以了: npm --registry https://registry.npm.taobao.org info underscore 改为cnpm执行: cnpm install --global vue-cli 安装成功: 试试版...

MrBoyce
15分钟前
0
0
CPU飙升分析

1、top -----看具体的进程 2、top -H -p pid ------该进程的线程 3、printf 0x%x 15248 ------将线程改为16进制 4、jstack 进程...

北极之北
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部