using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using LitJson;
using System.Drawing;
using System.Drawing.Imaging; namespace WetChat
{
public class Chat
{
public string Path; public string Width; public string Savepath; public string Codes;
public Chat(string savepath,string codes)
{
this.Path = "pages/index/index?codes="+ codes;
this.Savepath = savepath+"qr_"+codes+".png";
this.Codes = codes;
}
/// <summary>
/// 获取acesstoken
/// </summary>
/// <returns></returns>
public string GetAccess_Token()
{
string urls = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=&secret=";
HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(urls); //请求api
HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
string respText = "";
using (Stream resStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(resStream, Encoding.Default);
respText = reader.ReadToEnd();
resStream.Close();
}
JavaScriptSerializer Jss = new JavaScriptSerializer();
Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(respText);
//通过键access_token获取值
return respDic["access_token"].ToString();
}
/// <summary>
///
/// </summary>
/// <param name="path"></param>
/// <param name="width"></param>
/// <param name="savepath"></param>
public void GetWxCode()
{
string url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=" + GetAccess_Token();
HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(url); //创建url
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";
JsonData data = new JsonData();
data["path"] = this.Path;
data["width"] = this.Width; string json = data.ToJson();
byte[] load = Encoding.UTF8.GetBytes(json);
request.ContentLength = load.Length;
Stream writer = request.GetRequestStream();
writer.Write(load, 0, load.Length); HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
Stream s = response.GetResponseStream();
byte[] mg = StreamToBytes(s);
Image imgs = CaptureImage(mg);
byte[] mgs = PhotoImageInsert(imgs);
if (File.Exists(this.Savepath))
{
File.Delete(this.Savepath);
File.WriteAllBytes(this.Savepath, mgs); }
else
{ File.WriteAllBytes(this.Savepath, mgs); } } public static byte[] StreamToBytes(Stream stream)
{ List<byte> bytes = new List<byte>();
int temp = stream.ReadByte();
while (temp != -1)
{
bytes.Add((byte)temp);
temp = stream.ReadByte();
}
return bytes.ToArray(); } /// <summary>
/// 第二部截取:图片转换为文件流
/// </summary>
/// <param name="bytes"></param>
public System.Drawing.Image CaptureImage(byte[] bytes)
{
Image formimage = ReturnPhoto(bytes);
Bitmap bitmap = new Bitmap(440, 440);
Point p = new Point(0, 0); Size s = new Size(455, 455);
Graphics gra = Graphics.FromImage(bitmap);
gra.DrawImage(formimage, -15, -15, new Rectangle(p,s), GraphicsUnit.Pixel);
Image saveimage = Image.FromHbitmap(bitmap.GetHbitmap()); return saveimage; } /// <summary>
/// 第三部:图片转换文件流
/// </summary>
/// <param name="imgPhoto"></param>
/// <returns></returns>
public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
{
MemoryStream mstream = new MemoryStream();
imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] byData = new Byte[mstream.Length];
mstream.Position = 0;
mstream.Read(byData, 0, byData.Length); mstream.Close();
return byData;
}
/// <summary>
/// 第一步:将文件流转换为image
/// </summary>
/// <param name="streamByte"></param>
/// <returns></returns>
public System.Drawing.Image ReturnPhoto(byte[] streamByte)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
return img;
} }
}

  普通二维码有下面的微信的logo 所以截取

  分了三部:

  第一:将文件流转换为image

  第二:将image截取

  第三:将image转换为文件流

  

  生成100个编码总共用时40s(着实有点多,转换哪里太浪费了)

  

  

微信小程序获取普通二维码的更多相关文章

  1. 微信小程序条码、二维码生成模块

    代码地址如下:http://www.demodashi.com/demo/13994.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  2. 微信小程序之生成二维码

    最近项目中涉及到小程序的生成二维码,很是头疼,经过多次摸索,整理出了自己的一些思想方法,如有不足,欢迎指正. 首先完全按照小程序的结构依次填坑. pages--index.wxml <view ...

  3. 微信小程序扫描普通二维码打开小程序的方法

    很久没有写博客了,之前换了一份工作,很久没有做Android开发了,现在转做前端开发了,记录一下遇到的问题及解决的方法. 最近做微信小程序开发,遇到一个需求,后台管理系统生成的问卷和投票会有一个二维码 ...

  4. 微信小程序 - 配置普通二维码跳小程序

    普通二维码跳小程序规则: https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html#%E5%8A%9F%E8%83%B ...

  5. 转【微信小程序 四】二维码生成/扫描二维码

    原文:https://blog.csdn.net/xbw12138/article/details/75213274 前端 二维码生成 二维码要求:每分钟刷新一次,模拟了个鸡肋,添加了个按分钟显示的时 ...

  6. php 小程序获取渠道二维码 保存

    function ppost($url,$arr){ $post_data = json_encode($arr); $url=$url; $ch = curl_init(); curl_setopt ...

  7. 微信小程序生成带参二维码

    需求:生成小程序中的海报,需要小程序二维码可以使用户保存到本地在朋友圈分享 生成二维码工具类代码如下: package com.aone.foottalk.action.wx.util; import ...

  8. PHP后端代码生成微信小程序带参数的二维码保存成jpg图片上传到服务器getwxacodeunlimit

    老板最近有点飘了,他要在PC端的网站放一个微信小程序的二维码,并且扫描这个二维码以后要跳到小程序对应的房源详情页. 这是微信官方给出的文档,连接地址:https://developers.weixin ...

  9. 小程序canvas生成二维码图片踩的坑

    1:生成临时图片,保证画布被加载以及渲染(即本身不可以 hidden 或是 上级元素不可以 hidden 或是 wx:if 隐藏等) == > 建议:因为 canvas 的组件层级(z-inde ...

随机推荐

  1. Flink深入浅出: 应用部署与原理图解(v1.11)

    往期推荐: Flink深入浅出:内存模型 Flink深入浅出:JDBC Source从理论到实战 Flink深入浅出:Sql Gateway源码分析 Flink深入浅出:JDBC Connector源 ...

  2. linux 虚拟机下 安装redis

    虚拟机安装linux,打开,挂起就好: 使用ssh连接,这里使用的是Moba Xterm 可以ssh 可以ftp  满足你的日常开发所需,开发必备.每个人都有自己顺手的工具,你喜欢就好 虚拟机挂一边就 ...

  3. redis协议规范

    好多年前看过redis的代码,那个时候还是2.6的版本,集群和哨兵还没加入正式代码,这几年redis发展的好快.简略翻译一篇文章redis的https://redis.io/topics/protoc ...

  4. day54 Pyhton 前端JS05

    今日内容: 1.数组Array var colors = ['red','color','yellow']; 使用new 关键词对构造函数进行创建对象 var colors2 = new Array( ...

  5. JSON,数组根据字段分组

    function GroupbyName(data, Name) { //data数据源,Name 根据什么字段分组 var map = {}, dest = []; for (var i = 0; ...

  6. linux(centos8):zabbix配置邮件报警(监控错误日志)(zabbix5.0)

    一,zabbix5.0发邮件报警的准备工作: zabbix5.0在linux平台上的安装:参见这一篇: https://www.cnblogs.com/architectforest/p/129125 ...

  7. centos8平台使用dnf/yum管理软件包

    一,dnf的用途 centos7开始,DNF 成为了默认的软件包管理器,同时 yum 仍然是可用的 DNF包管理器克服了YUM包管理器的一些瓶颈,提升了用户体验,内存占用,依赖分析,运行速度等方面 D ...

  8. 智能DNS的实现

    网络路径远,导致用户访问延迟 各个运营商之间的带宽有阀口. GSLB 就近的返回服务器的地址 CDN网络 内容分发网络 Content Delivery Network CND服务商 阿里 腾讯 蓝汛 ...

  9. Markdown--补充版

    markdown语法实例 markdown语法实例 强调 分割线 引用 标题Setext方式 大标题 小标题 标题Atx方式 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 无序列表 有序 ...

  10. MVC联想查询绑定下拉框

    前言 在做搜索时,输入些内容时需要弹出下拉框给用户进行选择,极大的方便了用户,会给用户带来不一样的体验 Controller public ActionResult SSAC(string UserN ...