精华内容
下载资源
问答
  • C#后端生成二维码

    2020-08-31 15:05:51
    现在分享一段C#后端生成二维码的代码。 第一步:生成二维码 生成二维码我们需要用到MessagingToolkit.QRCode.dll。 上代码: /// <summary> /// 生成二维码 /// </summary> /// <param name=...

    现在生活中,我们用到二维码的场景真的是越来越多了。现在分享一段C#后端生成二维码的代码。

    第一步:生成二维码

    生成二维码我们需要用到MessagingToolkit.QRCode.dll
    上代码:

     /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="qrCodeContent">要编码的内容</param>
        /// <returns>返回二维码位图</returns>
        public static Bitmap QRCodeEncoderUtil(string qrCodeContent)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeScale = 5;
            qrCodeEncoder.QRCodeVersion = 0;
            Bitmap img = qrCodeEncoder.Encode(qrCodeContent);//指定utf-8编码, 支持中文 
            return img;
        }
    

    第二步:保存图片

    public void SaveQRCode(string uri)
            {
                var bmp = QRCodeEncoderUtil(uri);
                MemoryStream ms = new MemoryStream();
                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                byte[] arr = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(arr, 0, (int)ms.Length);
    
                string localPath = System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Tencent");
                if (!Directory.Exists(localPath))
                {
                    Directory.CreateDirectory(localPath);
                }
    
                string fileCode = System.Guid.NewGuid().ToString();
                localPath = localPath + "\\" + fileCode + ".png";
                string key = fileCode + ".png";
                Image img = Image.FromStream(ms);
                img.Save(localPath);
                ms.Close();
                Upload(localPath, key);//将图片上传至腾讯云
            }
    

    3.上传至腾讯云

            /// <summary>
            /// 将二维码上传至腾讯云
            /// </summary>
            /// <param name="path"></param>
            /// <param name="key"></param>
            public void Upload(string path, string key)
            {
                string appid = "1212121212";//设置腾讯云账户的账户标识 APPID
                string region = "beijing"; //设置一个默认的存储桶地域
                CosXmlConfig config = new CosXmlConfig.Builder()
                    .SetConnectionTimeoutMs(60000)  //设置连接超时时间,单位 毫秒 ,默认 45000ms
                    .SetReadWriteTimeoutMs(40000)  //设置读写超时时间,单位 毫秒 ,默认 45000ms
                    .IsHttps(true)  //设置默认 https 请求
                    .SetAppid(appid)  //设置腾讯云账户的账户标识 APPID
                    .SetRegion(region)  //设置一个默认的存储桶地域
                    .SetDebugLog(true)  //显示日志
                    .Build();  //创建 CosXmlConfig 对象
    
                //初始化 QCloudCredentialProvider ,SDK中提供了3种方式:永久密钥 、 临时密钥  、 自定义 
                QCloudCredentialProvider cosCredentialProvider = null;
    
                //方式1, 永久密钥
                string secretId = "12345"; //"云 API 密钥 SecretId";
                string secretKey = "2222222"; //"云 API 密钥 SecretKey";
                long durationSecond = 600;  //secretKey 有效时长,单位为 秒
                cosCredentialProvider = new DefaultQCloudCredentialProvider(secretId, secretKey, durationSecond);
    
                //初始化 CosXmlServer
                CosXmlServer cosXml = new CosXmlServer(config, cosCredentialProvider);
                try
                {
                    //string bucket = ""; //存储桶,格式:BucketName-APPID
                    //string key = ""; //对象在存储桶中的位置,即称对象键.
    
                    PutObjectRequest request = new PutObjectRequest("存储桶", key, path);
                    //设置签名有效时长
                    request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
                    //设置进度回调
                    request.SetCosProgressCallback(delegate (long completed, long total)
                    {
                        Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
                    });
                    //执行请求
                    PutObjectResult result = cosXml.PutObject(request);
                    //请求成功
                    Console.WriteLine(result.GetResultInfo());
                }
                catch (COSXML.CosException.CosClientException clientEx)
                {
                    //请求失败
                    Console.WriteLine("CosClientException: " + clientEx.Message);
                }
                catch (COSXML.CosException.CosServerException serverEx)
                {
                    //请求失败
                    Console.WriteLine("CosServerException: " + serverEx.GetInfo());
                }
            }
    
    展开全文
  • 后端生成二维码,Base64后,前端直接使用 开放中,可能会遇到生成二维码的时候,这个时候,可以前端生成,也可以后端生成。 这时候,就可以看,把压力放在哪比较好。 当二维码信息比较小,或者前端迭代比较困难的...

    后端生成二维码,Base64后,前端直接使用

    开放中,可能会遇到生成二维码的时候,这个时候,可以前端生成,也可以后端生成。

    这时候,就可以看,把压力放在哪比较好。

    当二维码信息比较小,或者前端迭代比较困难的时候(APP发布),就可以选择后端生成二维码。

    二维码这种图片,一般比较小,可直接生成,要是再放到文件服务器,未免有些多余,不如直接返回给前端。

    但是,如果返回文件流的话,前后端都不太好操作,并且可能因为网络原因,导致文件流损坏,但是Base64后,作为一个字段返回给前端,结构清晰,前端也好操作。

    一.后端工具类

    此工具类用到Hutool工具类和Google二维码包(zxing)

    1.依赖

    <dependency>
       <groupId>com.google.zxing</groupId>
       <artifactId>core</artifactId>
       <version>3.3.0</version>
    </dependency>
    <dependency>
       <groupId>com.google.zxing</groupId>
       <artifactId>javase</artifactId>
       <version>3.3.0</version>
    </dependency>
    
    <dependency>
       <groupId>cn.hutool</groupId>
       <artifactId>hutool-all</artifactId>
       <version>4.5.16</version>
    </dependency>
    
    import cn.hutool.core.codec.Base64;
    import cn.hutool.core.img.ImgUtil;
    import cn.hutool.extra.qrcode.QrCodeUtil;
    import cn.hutool.extra.qrcode.QrConfig;
    
    import java.awt.*;
    import java.io.ByteArrayOutputStream;
    
    /**
     * @author litong
     * @date 2019/10/14 18:14
     */
    public class QRCodeUtil {
    
        /**
         * 生成二维码
         *
         * @param text 储存内容
         * @param width  宽度
         * @param height  高度
         * @return
         */
        public static String getQRCodeBase64(String text, int width, int height) {
            QrConfig config = new QrConfig(width, height);
            // 设置边距,既二维码和背景之间的边距
            config.setMargin(1);
            // 设置前景色,既二维码颜色(青色)
            config.setForeColor(Color.BLACK.getRGB());
            // 设置背景色(灰色)
            config.setBackColor(Color.WHITE.getRGB());
            // 生成二维码到文件,也可以到流
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            QrCodeUtil.generate(text, config, ImgUtil.IMAGE_TYPE_PNG, outputStream);
            byte[] pngData = outputStream.toByteArray();
            // 这个前缀,可前端加,可后端加,不加的话,不能识别为图片
            return "data:image/png;base64," + Base64.encode(pngData);
        }
    
        /**
         * 生成二维码
         *
         * @param text 储存内容
         * @param config 自定义配置
         * @return
         */
        public static String getQRCodeBase64(String text, QrConfig config) {
            // 生成二维码到文件,也可以到流
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            QrCodeUtil.generate(text, config, ImgUtil.IMAGE_TYPE_PNG, outputStream);
            byte[] pngData = outputStream.toByteArray();
            return "data:image/png;base64," + Base64.encode(pngData);
        }
    
    
        public static void main(String[] args) {
            QrConfig config = new QrConfig(100, 100);
            // 设置边距,既二维码和背景之间的边距
            config.setMargin(3);
            // 设置前景色,既二维码颜色(青色)
            config.setForeColor(Color.CYAN.getRGB());
            // 设置背景色(灰色)
            config.setBackColor(Color.GRAY.getRGB());
            // 生成二维码到文件,也可以到流
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            QrCodeUtil.generate("wawaw", config, ImgUtil.IMAGE_TYPE_PNG, outputStream);
            byte[] pngData = outputStream.toByteArray();
            System.out.println(Base64.encode(pngData));
        }
    }
    
    

    二.前端显示

    前端可直接显示

    <img src="data:image/png;base64,iVBORwAANSU......VORK5CYII=" />
    
    展开全文
  • Java后端生成二维码

    千次阅读 2019-06-01 17:16:11
    Java后端生成二维码 pom.xml文件需要添加依赖jar包: <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.3.1</version&...

    Java后端生成二维码

    pom.xml文件需要添加依赖jar包:

    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>3.3.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
    <dependency>
    	<groupId>com.google.zxing</groupId>
    	<artifactId>core</artifactId>
    	<version>3.3.1</version>
    </dependency>

    生成二维码的工具类:

    package com.wust.Hisportal.user.admin.util;
    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    import javax.imageio.ImageIO;
    
    import org.apache.commons.lang.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.Binarizer;
    import com.google.zxing.BinaryBitmap;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.LuminanceSource;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.NotFoundException;
    import com.google.zxing.Result;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.common.HybridBinarizer;
    
    /**
     * 二维码工具类
     * @author yanzc
     *
     */
    public class QRCodeUtil {
    	
        private static final Logger logger = LoggerFactory.getLogger(QRCodeUtil.class);
    	
        //二维码颜色  
        private static final int BLACK = 0xFF000000;  
        //二维码颜色  
        private static final int WHITE = 0xFFFFFFFF; 
        //二维码宽 
        private static final int width = 200;
        //二维码高
        private static final int height = 200;
        //二维码生成格式
        private static final String imageType = "jpg";
      
        public static void main(String[] args) throws Exception {
        	String str = "人员编码:1234;人员姓名:李四;";
            zxingCodeCreate(str, "D:/二维码.jpg");
        }
        
        /** 
         * 生成二维码
         * @param text    二维码内容
         * @param outPutPath    二维码生成保存路径 
         */  
        public static void zxingCodeCreate(String text, String outPutPath){  
            Map<EncodeHintType, String> his = new HashMap<EncodeHintType, String>();  
            //设置编码字符集  
            his.put(EncodeHintType.CHARACTER_SET, "utf-8");  
            try {  
                //1、生成二维码  
                BitMatrix encode = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, his);  
                  
                //2、获取二维码宽高  
                int codeWidth = encode.getWidth();  
                int codeHeight = encode.getHeight();  
                  
                //3、将二维码放入缓冲流  
                BufferedImage image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB);  
                for (int i = 0; i < codeWidth; i++) {  
                    for (int j = 0; j < codeHeight; j++) {  
                        //4、循环将二维码内容定入图片  
                        image.setRGB(i, j, encode.get(i, j) ? BLACK : WHITE);  
                    }  
                }  
                File outPutImage = new File(outPutPath);  
                //如果图片不存在创建图片  
                if(!outPutImage.exists())  
                    outPutImage.createNewFile();  
                //5、将二维码写入图片  
                ImageIO.write(image, imageType, outPutImage);  
            } catch (WriterException e) {  
                e.printStackTrace();  
                logger.info("二维码生成失败");  
            } catch (IOException e) {  
                e.printStackTrace();  
                logger.info("生成二维码图片失败");  
            }  
        }  
          
        /** 
         * 二维码解析 
         * @param analyzePath    二维码路径 
         * @return 
         * @throws IOException 
         */  
        @SuppressWarnings({ "rawtypes", "unchecked" })  
        public static String zxingCodeAnalyze(String analyzePath) throws Exception{  
            MultiFormatReader formatReader = new MultiFormatReader();  
            String resultStr = null;  
            try {  
                File file = new File(analyzePath);  
                if (!file.exists()) {  
                    return "二维码不存在";  
                }  
                BufferedImage image = ImageIO.read(file);  
                LuminanceSource source = new BufferedImageLuminanceSource(image);  
                Binarizer binarizer = new HybridBinarizer(source);    
                BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);  
                Map hints = new HashMap();  
                hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
                Result result = formatReader.decode(binaryBitmap, hints); 
                resultStr = result.getText();
            } catch (NotFoundException e) {  
                e.printStackTrace();  
            }    
            logger.info(resultStr);
            return resultStr;  
        }  
          
    
    }
    

     

    展开全文
  • 由于业务需求,需要打印二维码,但是jq生成的二维码无法被Clodop打印,js转化为img也不兼容,所以在后端生成二维码图片,返回到前端打印。 接下来就是贴代码了 1、使用Google zixing接口生成二维码图片,这部分是...

    由于业务需求,需要打印二维码,但是jq生成的二维码无法被Clodop打印,js转化为img也不兼容,所以在后端生成二维码图片,返回到前端打印。

    接下来就是贴代码了
    1、使用Google zixing接口生成二维码图片,这部分是参考其他文章的,就直接贴了

    public class MatrixToImageWriter {
        private static final int BLACK = 0xFF000000;
        private static final int WHITE = 0xFFFFFFFF;
    
    //    private MatrixToImageWriter() {
    //    }
    
        public static BufferedImage toBufferedImage(BitMatrix matrix) {
            int width = matrix.getWidth();
            int height = matrix.getHeight();
            BufferedImage image = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            for (int x = 0; x < width; x++) {
                for (int y = 0; y < height; y++) {
                    image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
                }
            }
            return image;
        }
    
        public static void writeToFile(BitMatrix matrix, String format, File file)
                throws IOException {
            BufferedImage image = toBufferedImage(matrix);
            if (!ImageIO.write(image, format, file)) {
                throw new IOException("Could not write an image of format "
                        + format + " to " + file);
            }
        }
    
        public static void writeToStream(BitMatrix matrix, String format,
                                         OutputStream stream) throws IOException {
            BufferedImage image = toBufferedImage(matrix);
            if (!ImageIO.write(image, format, stream)) {
                throw new IOException("Could not write an image of format " + format);
            }
        }
    
       public void QrCode(String text,int width,int height,OutputStream bs) throws WriterException, IOException {
            String format = "png";// 二维码的图片格式
    
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 内容所使用字符集编码
            BitMatrix bitMatrix = new MultiFormatWriter().encode(text,
                    BarcodeFormat.QR_CODE, width, height, hints);
            // 生成二维码
            bitMatrix=deleteWhite(bitMatrix);
    //        String fileName = System.currentTimeMillis()+".png";
    //        File outputFile = new File("D:/workspace/ekp/WebContent/mp/inventory/image" + File.separator + "new.png");
            MatrixToImageWriter.writeToStream(bitMatrix, format, bs);
    
        }
    

    然而这里生成的二维码是有白边的,所以需要添加去白边的方法:

    private static BitMatrix deleteWhite(BitMatrix matrix) {
            int[] rec = matrix.getEnclosingRectangle();
            int resWidth = rec[2] + 1;
            int resHeight = rec[3] + 1;
    //        System.out.println(resHeight+"-----"+resWidth);
            BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
            resMatrix.clear();
            for (int i = 0; i < resWidth; i++) {
                for (int j = 0; j < resHeight; j++) {
                    if (matrix.get(i + rec[0], j + rec[1]))
                        resMatrix.set(i, j);
                }
            }
            return resMatrix;
        }
    

    2、后端将生成的二维码图片转为base64文件流,返回到前端,本文的图片格式为image/png

    public void qrcode(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
    		JsonObject json=new JsonObject();
    		response.setContentType("image/png");
    		String text = request.getParameter("text");
    		ByteArrayOutputStream bs=new ByteArrayOutputStream();
    		int height = Integer.parseInt(request.getParameter("height"));
    		int width = Integer.parseInt(request.getParameter("width"));
    		MatrixToImageWriter matrixToImageWriter = new MatrixToImageWriter();
    		matrixToImageWriter.QrCode(text, width, height,bs);
    
    		String imagebuf= Base64.byteArrayToBase64(bs.toByteArray());
    		response.getWriter().append(imagebuf);
    
    	}
    

    3、接下来看看前端:
    html页面,使用img标签:

    <img id="image" style="width: 125px;height: 125px"></img>
    
    js代码:请求后端,渲染到页面
    
    $.post("${LUI_ContextPath}/mp/zp/stock/mp_zp_stock_cpchu_mes/mpZpStockCpchuMes.do?", {
                "method": "qrcode",
                "text": QRCodeStr,
                "height": 200,
                "width": 200
            }, function (data) {
                console.log(data);
                // var img=JSON.parse(data);
                <%--var url = "${LUI_ContextPath}/wdi/inventory/image/"+img.filename;--%>
                var url="data:image/png;base64,"+data;
                $("#image").attr("src", url);
            });
    
    展开全文
  • 首先在Pom中导入依赖 <...-- 后端生成二维码工具类--> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <vers...
  • java后端生成二维码图片用来下载

    千次阅读 2018-06-20 10:49:16
    应公司需求,要求生成二维码图片,并且将二维码放进一张底层图片上,并赋予文字。 1.首先我们要想办法生成二维码,二维码是黑白双色,中间不用添加商户logo,这里我们采用的google的jar包生成二维码导入maven依赖:...
  • java后端生成二维码

    2019-06-12 16:33:56
    * @see 1)生成二维码的纠错级别建议采用最高等级H,这样可以增加二维码的正确识别能力(我测试过,不设置级别时,二维码工具无法读取生成的二维码图片) * @see 2)头像大小最好不要超过二维码本身大小的1/5,而且只能...
  • 最近在github上找到一个相对比较好的C#二维码生成类库。在这里和大家分享一下。 github地址:https://github.com/codebude/QRCoder 把解决方案下载下来,编译生成QRCoder.dll,就可以使用了。这个类库定制化的参数...
  • //生成二维码QRCode图片 ImageIO.write(bufImg, "jpg", response.getOutputStream()); } catch (Exception e) { e.printStackTrace(); } } } @GetMapping("qrCode") public void qrCode(HttpServletRequest requset...
  • 好久没有更新博客,最近项目里有个功能是需要生成二维码,所以记录一下这个功能。 之前有用过自己写的二维码工具类结合谷歌的com.google.zxing版本3.3.3,自己写的一个,因为创建的文件比较多,后来发现项目中...
  • 前端工程师在用qrcode生成二维码的时候,不知怎么的钉钉小程序开发工具不支持创建对象了,导致qrCode.js不能获取到dom的id,进而无法设置二维码,最后就想到了后端生成二维码返回给前端使用,刚开始想这个并不难,...
  • @Test //标签生成 public void test05() throws IOException, WriterException { int width = Integer.parseInt("430"); // 图片宽 int height = Integer.parseInt("350");// 图片高 String titleStr = "WB_...
  • <p><img alt="" height="626" src="https://img-ask.csdnimg.cn/upload/1622017957613.png" width="1388" /></p>
  • 2、前端自己或者拿到后端网址生成二维码的方法 加微信15530578763 3、后台管理系统中右下界面不能滚动的问题,自己出现过, 外加div定高,内部自己撑起来高度。 加微信15530578763 4、可以滚动,但是看不见取消...
  • .net 实现微信Native支付方式,根据官方demo,已经从微信后台拿到code_url,现在需要将其转换为二维码展示在html页面中。 官方给出的示例使用asp实现,现做一些修改,通过ajax实现。 <head> <meta ...
  • 通过com.google.zxing生成二维码 1、引入依赖 <com.google.zxing>3.1.0</com.google.zxing> <!--二维码--> <dependency> <groupId>com.google.zxing</groupId> <...
  • c#后端生成二维码前端直接使用 小程序可能会遇到生成二维码的时候,这个时候,可以前端生成,也可以后端生成。 这时候,就可以看,把压力放在哪比较好。
  • Java生成二维码

    2019-12-18 10:50:55
    文章目录后端生成二维码 后端生成二维码 1.后台生成二维码接口,传入参数:高、宽、二维码内容,可生成相应高宽含该内容的二进制流(二维码图片),不传高宽则默认二维码的大小为200*200。 /* * 生成二维码 * */ ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,244
精华内容 3,697
关键字:

后端生成二维码