精华内容
下载资源
问答
  • 小程序生成二维码并且把二进制流转换图片
  • URL转二维码再转二进制流图片


    在.net中开发中有时候需要将一个url地址转换成二维码,然后再转换成二进制流格式存入数据库中,最后再将二进制流图片用报表的方式呈现出来,以下是具体的步骤:
    1.首先下载zxing.dll并引入项目中
    2.在cs文件顶部添加如下引用
    using System.Drawing;
    using com.google.zxing.common;
    using System.Drawing.Imaging;
    using System.IO;
    3.编写如下代码:
    ///<summary>
            /// 生成二维码
            /// </summary>
            private byte[] CreateEWM(string content)
            {
                ByteMatrix byteMatrix = new com.google.zxing.MultiFormatWriter().encode(content, com.google.zxing.BarcodeFormat.QR_CODE, 250, 250);
                EncoderParameters eps = new EncoderParameters();
                eps.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 1000L);
                Bitmap bmap = toBitmap(byteMatrix);
                using (MemoryStream stream = new MemoryStream())
                {
                    bmap.Save(stream, ImageFormat.Jpeg);
                    byte[] data = new byte[stream.Length];
                    stream.Seek(0, SeekOrigin.Begin);
                    stream.Read(data, 0, Convert.ToInt32(stream.Length));
                    return data;
                }
            }
     /// <summary>
            /// 转换成位图
            /// </summary>
            /// <param name="matrix"></param>
            /// <returns></returns>
            private Bitmap toBitmap(ByteMatrix matrix)
            {
                int width = matrix.Width;
                int height = matrix.Height;
                Bitmap bmap = new Bitmap(width, height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                for (int x = 0; x < width; x++)
                {
                    for (int y = 0; y < height; y++)
                    {
                        bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));
                    }
                }
                return bmap;
            }
    4.
    byte[] bytaryEWM = CreateEWM(codeUrl);
    最后只要调用此方法,传入一个你需要转换的url即可,此时已经完成了url到二进制流二维码图片的转换,此方法不用将二维码图片保存至项目的某个文件夹中,然后再通过图片src调用,因为报表工具可以直接展示二进制流的图片。


    展开全文
  • <p>java 二维码图片转二进制 存进Oracle 使用什么技术呢?</p>
  • 步骤:1 :通过接口获取token,为了避免在冲突,token最好存入redis中,即用即取,注意事项:获取到accessToken取出来是带双引号的,一定要代替掉"",不然返回的转化出来的二进制不对,这个地方坑了我好久,切记切记,还有就是...

    需求:每个用户生成自己的小程序二维码,前端生成商品海报,用于小程序的推广,废话不多说,看代码

    步骤:1 :通过接口获取token,为了避免在冲突,token最好存入redis中,即用即取,注意事项:获取到accessToken取出来是带双引号的,一定要代替掉"",不然返回的转化出来的二进制不对,这个地方坑了我好久,切记切记,还有就是sence这个参数不能带符号,明明官方文档上说的可以带的,但是我带了返回的值就不对,我也不知道为什么 0.0
    2:通过接口获取到用户二维码的流,并转化为二进制,这样前台就可以成功读取了

    public String getCode(){
    String accessToken;
    if (redisTemplate.hasKey("token")) {
        accessToken = redisTemplate.opsForValue().get("token").toString();
    } else {
        String token = RestTemplateUtil.get(restTemplate, "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret);
        JsonParser jsonParser = new JsonParser();
        JsonObject jsonObject = (JsonObject) jsonParser.parse(token);
        accessToken = jsonObject.get("access_token").toString();
        redisTemplate.opsForValue().set("token", accessToken, 1, TimeUnit.HOURS);
    }
    
    accessToken = accessToken.replaceAll("\"","");
    String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken;
    
    String reslut = SendPost.sendPost3(url,sence);
    }
    
    public static String sendPost3(String url,String sence) {
        PrintWriter out = null;
        String result = "";
        InputStream inputStream=null;
        //请求数据,自行拼接
        String param="{ \"scene\":"+sence+",\"page\":\"pages/user/user\",\"width\":280}";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            conn.setRequestProperty("responseType", "arraybuffer");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            //获取流数据
            inputStream = conn.getInputStream();
            // 将获取流转为base64格式
            byte[] data = null;
            ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
            byte[] buff = new byte[100];
            int rc = 0;
            while ((rc = inputStream.read(buff, 0, 100)) > 0) {
                swapStream.write(buff, 0, rc);
            }
            data = swapStream.toByteArray();
            result = new String(Base64.getEncoder().encode(data));
    
        }catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(inputStream!=null){
                    inputStream.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return "data:image/PNG;base64,"+result;
    }
    
    展开全文
  • POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN 获取二进制流后 header("content-type: image/jpeg"); echo $stream; 就可以直接显示出来
    POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
    
    

    获取二进制流后

    header("content-type: image/jpeg");
       
    
    echo $stream;
    

    就可以直接显示出来

    这是用云开发开发的小程序,可以参考一下

    在这里插入图片描述

    展开全文
  • 、小程序前端js   js源码: wx.request({    url: app.globalData.url + "getCodeAccessToken.do", //请求服务器后台获取accessToken    data: {  },    method: 'POST',    ...

    一、服务器后台请求微信获取accessToken

    Token两个小时以内都属于有效token,一天可从微信获取的token次数为两千次,所以最好是第一次获取token保存,每次获取token前先查询数据库保存的token是否失效,未失效直接调用,失效重新获取,更新本地token。

    //获取accessToken

    public static Token getToken() throws KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException, MalformedURLException, UnsupportedEncodingException, IOException, ProtocolException {
           String accessToken = null;

          String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
           Token token = new Token();
           long expiresIn = 0;
           Map<String,String> resMap = new HashMap();
           String requestUrl = token_url.replace("APPID", APP_ID).replace("APPSECRET", APP_SECRET);
           // 发起GET请求获取凭证
           StringBuffer SubmitResult = httpsRequest(requestUrl, "GET", null, false);
           try {
               JSONObject jsonObject = JSONObject.fromObject(SubmitResult.toString());
               accessToken = jsonObject.getString("access_token");
               expiresIn = jsonObject.getInt("expires_in");
               token.setAccessToken(accessToken);
               token.setExpiresIn(expiresIn);
                  //token.setExpiresIn(jsonObject.getInt("expires_in"));
              } catch (Exception e) {
                   // 获取token失败
                   //log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
              }
           return token;
       }

       //获取token的Controller
        @RequestMapping(value = "/getCodeAccessToken", method=RequestMethod.POST)
        public void getCodeAccessToken(HttpServletResponse response){
            try {
                Token token = tokenService.getLocalToken();
                if(token == null || token.equals("")){
                          Token t = new Token();
                          t = WeChatUtil.getToken();
                          t.setId(FileTool.getUUID());
                          t.setCreateTime(System.currentTimeMillis());
                          tokenService.insertToken(t);
                          render(t.getAccessToken(), response);
                   }else{
                       long loseTime = token.getExpiresIn();
                       long createTime = token.getCreateTime();
                       long time = System.currentTimeMillis();
                       if ((time-createTime)/1000 < loseTime) {
                         render(token.getAccessToken(), response);
                       }else{
                           tokenService.deleteById(token.getId());
                           Token t = new Token();
                            t = WeChatUtil.getToken();
                            t.setId(FileTool.getUUID());
                            t.setCreateTime(System.currentTimeMillis());
                           tokenService.insertToken(t);
                          render(t.getAccessToken(), response);
                       }
                   }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }


     //http请求工具类

     private static StringBuffer httpsRequest(String requestUrl, String requestMethod, String output,boolean needCert)
              throws NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException, MalformedURLException,
              IOException, ProtocolException, UnsupportedEncodingException {


          URL url = new URL(requestUrl);
          HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

          //是否需要数字证书
          if(needCert){
              //设置数字证书
              setCert(connection);
          }
          connection.setDoOutput(true);
          connection.setDoInput(true);
          connection.setUseCaches(false);
          connection.setRequestMethod(requestMethod);
          if (null != output) {
              OutputStream outputStream = connection.getOutputStream();
              outputStream.write(output.getBytes("UTF-8"));
              outputStream.close();
          }

          // 从输入流读取返回内容
          InputStream inputStream = connection.getInputStream();
          InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
          BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
          String str = null;
          StringBuffer buffer = new StringBuffer();
          while ((str = bufferedReader.readLine()) != null) {
              buffer.append(str);
          }

          bufferedReader.close();
          inputStreamReader.close();
          inputStream.close();
          inputStream = null;
          connection.disconnect();
          return buffer;
      }

    //token实体类

    public class Token {
        private String id;
        
        private String accessToken;        // access_token
        
        private long expiresIn;        // expiresin
        
        private long createTime;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getAccessToken() {
            return accessToken;
        }

        public void setAccessToken(String accessToken) {
            this.accessToken = accessToken;
        }

        public long getExpiresIn() {
            return expiresIn;
        }

        public void setExpiresIn(long expiresIn) {
            this.expiresIn = expiresIn;
        }

        public long getCreateTime() {
            return createTime;
        }

        public void setCreateTime(long createTime) {
            this.createTime = createTime;
        }

    二、小程序前端js

     

    js源码:

    wx.request({
            
           url: app.globalData.url + "getCodeAccessToken.do", //请求服务器后台获取accessToken
            
           data: {
          },
            
          method: 'POST',
            
          header: {
          'content-type': 'application/x-www-form-urlencoded'
         },
            
       success: function (res) {

                    console.log(res);
                
                   that.setData({
                        
                  token:res.data //后台返回的accessToken
                     
               })

                wx.request({

                    url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='+that.data.token, //获取小程序B接口二维码
                    
                    method: "POST",
                    
                    responseType: 'arraybuffer', //这一行非常重要,重中之重
                    
                   data: {
                       scene:'22a45fds' ,
                      page: "pages/login/login",
                      width: 280,
                     is_hyaline: true
                },
                    
                  header: {
                    'content-type': 'application/json;charset=utf-8'
               },
                    
    success(res) {

                        console.log(res.data);
                        
                        var base64 = wx.arrayBufferToBase64(res.data);

                        that.setData({ imgurl:"data:image/PNG;base64,"+ base64})

                        }

                    })

    },

                fail: function (res) {
    },

                complete: function (res) { },
    })

     

    wxml标签

    <image  src='{{imgurl}}'></image>

     

     

    展开全文
  • 我可以用zxing将一个Url转为一个二维码图片,可是怎么将这个图片转换成数据流呢?类似IOS里面的NSdata的数据格式?
  • 二进制数字串生成二维码图片

    千次阅读 2019-04-20 16:09:44
    二进制数字生成二维码二进制数字生成二维码代码细节 用二进制数字生成二维码 打CTF比赛时,遇到题目将flag隐藏到二进制数中,数字的长度为一个整数的平方,以01表示黑白,利用Python3的PIL中的Image库,用二进制...
  • 二维码在本地可以正常的在jsp上显示,部署到服务器上,展示出来的却是二进制文件 我的思路是这样的 我刚开始觉得是二维码图片生成有问题,随后我放弃了生成二维码,随便选择了一个JPG传到前端显示,结 果还是...
  • 前提业务要求:前台页面展示数据,有下载按钮,点击下载,下载对应数据的二维码。 首先,在pom.xml文件中添加依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>...
  • 微信小程序二维码返回的二进制内容,是一个byte[] 所以直接用byte[]接收即可,然后写入文件中: req – 请求的参数json字符串 byte[] bytes = new RestTemplate().postForObject(二维码接口url + accessToken, req, ...
  • 微信小程序二维码返回的二进制上传到OSS public ResultDTO getQrCode(ReqQrCodeDTO reqQrCodeDTO) { try { //拼接URL String access_token_url = WX_APPLET_GETAT+"?appid="+WX_APPLET_ID+"&secret="+WX_APPLET...
  • 每个 byte 转成 8 位二进制数据,二进制的 0、1表示像素点的黑白。测试点阵是 48*48 像素,2304个点,对应 288 个byte 数据。 搜了一下没找到现成轮子,想着难度也不大,参考 zxing 二维码的显示,顺便复习下 ...
  • // 实现二:生成二维码图片并将图片转为二进制传递给前台 // 1、读取文件转换为字节数组 ByteArrayOutputStream out = new ByteArrayOutputStream(); BufferedImage image = toBufferedImage(bitMatrix); //// ...
  • python下二进制流文件转二维码

    千次阅读 2019-09-28 16:07:01
    python下二进制流文件转二维码 之前做过的一个ctf中的misc,经过一系列操作得到一个flag.txt 里面是一串二进制流 突然束手无策 经简单计算 260^2=67600 所以尝试能否转化为一个二维码 网上找了好久,没找到好用的...
  • 因为,项目需要支持vs2010的cpp提取二维码二进制数据,原本zbar和zxing都会默认进行字符集编码转换(zxing默认utf-8),导致部分0x80等二进制数据被强制编码转换,而导致无法正确识别。现通过基于zxing源码修改默认...
  • 后台返回的数据为 前端需要获取数据后进行转换 js文件 let url = ‘后台接口地址’ var that=this wx.request({ url: url, method: ‘GET’,  header: {  ‘Authorization’:‘token值’//请求头加入token值 ...
  • 废话不说,直接上代码 ...//得到post过来的二进制原始数据 $file = fopen("xcxcode/wxcode1.jpg","w");//创建件准备写入,文件名xcxcode/wxcode1.jpg为自定义 fwrite($file,$jpg);//写入 fclose($file);//关闭 ...
  • getCode() { axios({ method: "get", url: "admin/verify", responseType: "arraybuffer", // 最为关键 }).then((res)=> { ... }, 登录验证码后端返回的二进制 进行如上操作 得到的imgUrl 直接放到img标签里面就可以了
  • 为了以后方便 小程序request请求中添加responseType: ‘arraybuffer’,
  • 项目中需要生成小程序码给前端,生成二维码接口微信服务器直接返回二进制数据流,因为前后端接口是json格式同时业务服务器不能保存图片再给前端访问,需要json返回二进制图片数据 尝试直接返回二进制,字符太长无法...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • <Button type="danger" style={{float:"right",background:"rgba(247,136,2,1)",color:"#fff",border:"none",marginLeft:"20px"}} icon="upload" onClick={()=>this.Downloader()}>...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,108
精华内容 5,643
关键字:

二维码是二进制