精华内容
下载资源
问答
  • 用二进制数字串生成二维码图片

    千次阅读 2019-04-20 16:09:44
    用二进制数字生成二维码用二进制数字生成二维码代码细节 用二进制数字生成二维码 打CTF比赛时,遇到题目将flag隐藏到二进制数中,数字的长度为个整数的平方,以01表示黑白,利用Python3的PIL中的Image库,用二进制...

    用二进制数字串生成二维码图片

    前言

    最近一个CTF比赛时,遇到一个题目给出了一段全是01的数字串,且数字的长度为一个整数的平方(如25^2=625)时,有可能是以0、1表示黑或者白的一个像素,这样就可以生成一个正方形的像素图,以前遇到过这样的题目生成了一个二维码,扫描二维码得到Flag。
    这里利用Python3的PIL中的Image库,用01数字串生成一个二维码。

    代码

    from PIL import Image
    MAX = 25
    pic = Image.new("RGB",(MAX, MAX))
    str = "得到的二进制数字"
    i=0
    for y in range (0,MAX):
        for x in range (0,MAX):
            if(str[i] == '1'):
                pic.putpixel([x,y],(0, 0, 0))
            else:
                pic.putpixel([x,y],(255,255,255))
            i = i+1
    pic.show()
    pic.save("flag.png")``
    

    细节

    原本是SCTF中的一道MISC题,题目中得到的二进制数字串如下 1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011
    运行代码后得到图片,因为只有625像素图片比较小。
    在这里插入图片描述
    扫描二维码得到Flag
    在这里插入图片描述
    找了我半天,而且装Pillow库很麻烦,而且不这么写from PIL import Image还会出问题,网上也没有找到好的办法
    可惜这次比赛没有考到这个点,杂项真令人头大,不过这个知识点有这么个了解就够了,于是拿出来写个备忘。。

    合天公众号的一篇文章提到这个,参考的代码,也有很多好的可以参考
    https://mp.weixin.qq.com/s/RdHbQrhJdJrbaI5MsHGpkg

    展开全文
  • 把字符转换成二维码并且显示出来的个简洁的例子。
  • ios 生成二维码

    千次阅读 2015-11-13 10:50:18
    这两天在做一个项目,要根据一串字符串生成一张二维码,研究了下; 有些用第三方的,iOS7之后,可以使用原生的CIFilter创建二维码,但是生成二维码只有黑白,而且大小不好控制,找了一下资料,发现解决的方法,使...

    这两天在做一个项目,要根据一串字符串生成一张二维码,研究了下;

    有些用第三方的,iOS7之后,可以使用原生的CIFilter创建二维码,但是生成的二维码只有黑白,而且大小不好控制,找了一下资料,发现解决的方法,使二维码透明背景,自定义颜色,还能加上阴影效果,方法很简单,直接调用即可,效果如下:


    二维码下面的这串数字是我自己加的,不是生成的!

    项目可能要导入一个库
    #import <CoreImage/CoreImageDefines.h>

    下面是方法:

    首先是二维码的生成,使用CIFilter很简单,直接传入生成二维码的字符串即可:

    - (CIImage *)createQRForString:(NSString *)qrString {
        NSData *stringData = [qrString dataUsingEncoding:NSUTF8StringEncoding];
        // 创建filter
        CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
        // 设置内容和纠错级别
        [qrFilter setValue:stringData forKey:@"inputMessage"];
        [qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];
        // 返回CIImage
        return qrFilter.outputImage;
    }

    2、因为生成的二维码是一个CIImage,我们直接转换成UIImage的话大小不好控制,所以使用下面方法返回需要大小的UIImage

    - (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {
        CGRect extent = CGRectIntegral(image.extent);
        CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
        // 创建bitmap;
        size_t width = CGRectGetWidth(extent) * scale;
        size_t height = CGRectGetHeight(extent) * scale;
        CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
        CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
        CIContext *context = [CIContext contextWithOptions:nil];
        CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
        CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
        CGContextScaleCTM(bitmapRef, scale, scale);
        CGContextDrawImage(bitmapRef, extent, bitmapImage);
        // 保存bitmap到图片
        CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
        CGContextRelease(bitmapRef);
        CGImageRelease(bitmapImage);
        return [UIImage imageWithCGImage:scaledImage];
    }

    3、因为生成的二维码是黑白的,所以还要对二维码进行颜色填充,并转换为透明背景,使用遍历图片像素来更改图片颜色,因为使用的是CGContext,速度非常快:

    
    void ProviderReleaseData (void *info, const void *data, size_t size){
        free((void*)data);
    }
    - (UIImage*)imageBlackToTransparent:(UIImage*)image withRed:(CGFloat)red andGreen:(CGFloat)green andBlue:(CGFloat)blue{
        const int imageWidth = image.size.width;
        const int imageHeight = image.size.height;
        size_t      bytesPerRow = imageWidth * 4;
        uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        CGContextRef context = CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace,
                                                     kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);
        CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), image.CGImage);
        // 遍历像素
        int pixelNum = imageWidth * imageHeight;
        uint32_t* pCurPtr = rgbImageBuf;
        for (int i = 0; i <</span> pixelNum; i++, pCurPtr++){
            if ((*pCurPtr & 0xFFFFFF00) <</span> 0x99999900)    // 将白色变成透明
            {
                // 改成下面的代码,会将图片转成想要的颜色
                uint8_t* ptr = (uint8_t*)pCurPtr;
                ptr[3] = red; //0~255
                ptr[2] = green;
                ptr[1] = blue;
            }
            else
            {
                uint8_t* ptr = (uint8_t*)pCurPtr;
                ptr[0] = 0;
            }
        }
        // 输出图片
        CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight, ProviderReleaseData);
        CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight, 8, 32, bytesPerRow, colorSpace,
                                            kCGImageAlphaLast | kCGBitmapByteOrder32Little, dataProvider,
                                            NULL, true, kCGRenderingIntentDefault);
        CGDataProviderRelease(dataProvider);
        UIImage* resultUIImage = [UIImage imageWithCGImage:imageRef];
        // 清理空间
        CGImageRelease(imageRef);
        CGContextRelease(context);
        CGColorSpaceRelease(colorSpace);
        return resultUIImage;
    }
    

    4、经过这样的处理,基本上二维码就成型了,如果还想加上阴影,就在ImageViewLayer上使用下面代码添加阴影:

    ImageView.layer.shadowOffset = CGSizeMake(0, 0.5);  // 设置阴影的偏移量
    ImageView.layer.shadowRadius = 1;  // 设置阴影的半径
    ImageView.layer.shadowColor = [UIColor blackColor].CGColor; // 设置阴影的颜色为黑色
    ImageView.layer.shadowOpacity = 0.3; // 设置阴影的不透明度

    5、下面是例子:

    UIImage *qrcode = [self createNonInterpolatedUIImageFormCIImage:[self createQRForString:@"0097612656205"] withSize:250.0f];
        UIImage *customQrcode = [self imageBlackToTransparent:qrcode withRed:60.0f andGreen:74.0f andBlue:89.0f];
        self.qrcodeView.image = customQrcode;
        // set shadow
        self.qrcodeView.layer.shadowOffset = CGSizeMake(0, 2);
        self.qrcodeView.layer.shadowRadius = 2;
        self.qrcodeView.layer.shadowColor = [UIColor blackColor].CGColor;
        self.qrcodeView.layer.shadowOpacity = 0.5;





    展开全文
  • C# 生成二维码

    2019-01-23 09:20:00
    使用ThoughtWorks实现生成二维码操作步骤: 第步:VS 通过Nuget安装ThoughtWorks,略 第二步:新增类库,实现生成二维码函数,如下所示: /// <summary> /// 使用ThoughtWorks生成二维码图片 /// ...

     一.ThoughtWorks

    使用ThoughtWorks实现生成二维码操作步骤:

    第一步:VS 通过Nuget安装ThoughtWorks,略

    第二步:新增类库,实现生成二维码函数,如下所示:

         /// <summary>
            /// 使用ThoughtWorks生成二维码图片
            /// </summary>
            /// <param name="imgPath">图片路径</param>
            /// <param name="codeContent">内容信息</param>
            /// <returns></returns>
            public string NewQRCodeByThoughtWorks(string imgPath, string codeContent, ImageFormat imgType)
            {
                QRCodeEncoder encoder = new QRCodeEncoder();
                encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
                encoder.QRCodeScale = 4;//大小(值越大生成的二维码图片像素越高)
                encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
                encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)
                encoder.QRCodeBackgroundColor = Color.Yellow;
                encoder.QRCodeForegroundColor = Color.Green;
    
                Bitmap bcodeBitmap = encoder.Encode(codeContent);
                bcodeBitmap.Save(imgPath, imgType);//@"E:\test.png"      ImageFormat.Png
                bcodeBitmap.Dispose();
                return imgPath;
            }

     注意:

    如果在使用Nuget安装库文件,出现版本不兼容,提示升级Nuget时,处理方式:

    方式一:

    单击所需要安装的库文件的ID,出现如下图所示信息

    单击复诊图标

    VS中工具==》库程序包管理器==》程序包管理器控制台==》将复制的信息粘贴到 控制台==》Enter回车==》开始下载安装所需要版本的库文件==》安装 引用成功 哦也

    方式二:使用高版本的VS

     

    二.Zxing.Net

    第一步:使用Nuget安装 略

    第二步:实现

            /// <summary>
            /// 使用ZxingNet生成二维码图片
            /// </summary>
            /// <param name="imgPath">图片路径</param>
            /// <param name="codeContent">内容信息</param>
            /// <param name="width"></param>
            /// <param name="height"></param>
            /// <param name="imgType">ImageFormat imgType</param>
            /// <param name="BarcodeFormat barcodeFormat">barcodeFormat</param>
            /// <returns></returns>
            public string NewQRCodeByZxingNet(string imgPath, string codeContent, int width, int height,
                ImageFormat imgType, BarcodeFormat barcodeFormat)
            {
                // 1.设置QR二维码的规格
                QrCodeEncodingOptions code = new QrCodeEncodingOptions();
                code.CharacterSet = "UTF-8"; // 设置编码格式,否则读取'中文'乱码
                code.Height = height;
                code.Width = width;
                code.Margin = 1; // 设置周围空白边距
    
                // 2.生成条形码图片并保存
                BarcodeWriter wr = new BarcodeWriter();
                wr.Format = barcodeFormat; // 二维码 BarcodeFormat.QR_CODE
                wr.Options = code;
                Bitmap img = wr.Write(codeContent);
                img.Save(imgPath, imgType);
    
                return imgPath;
            }
    
            /// <summary>
            /// ZXing根据图片读取二维码内容
            /// </summary>
            /// <param name="img">Image img</param>
            /// <param name="BarcodeFormat barcodeFormat">barcodeFormat</param>
            /// <returns></returns>
            public string ReadQrCode(Image img, BarcodeFormat barcodeFormat)
            {
                // 1.设置读取条形码规格
                DecodingOptions decodeOption = new DecodingOptions();
                decodeOption.PossibleFormats = new List<BarcodeFormat>() { barcodeFormat };
    
                // 2.进行读取操作
                ZXing.BarcodeReader br = new BarcodeReader();
                br.Options = decodeOption;
                ZXing.Result rs = br.Decode(img as Bitmap);
                if (rs == null) return string.Empty;
                else return rs.Text;
            }
    
    
            /// <summary>
            /// 使用ZxingNet生成二维码图片 二维码带有校验功能,故可以在中间区域展示一定尺寸的图片
            /// </summary>
            /// <param name="logoImg">logo图片路径</param>
            /// <param name="imgPath">二维码图片路径</param>
            /// <param name="codeContent"></param>
            /// <param name="width"></param>
            /// <param name="height"></param>
            /// <param name="imgType">ImageFormat imgType</param>
            /// <param name="BarcodeFormat barcodeFormat">barcodeFormat</param>
            /// <returns></returns>
            public string NewQrCodeAndImgByZxingNet(string logoImg, string imgPath, string codeContent,
                int width, int height, ImageFormat imgType, BarcodeFormat barcodeFormat)
            {
                // 1.设置QR二维码的规格
                QrCodeEncodingOptions qrEncodeOption = new QrCodeEncodingOptions();
                qrEncodeOption.CharacterSet = "UTF-8"; // 设置编码格式,否则读取'中文'乱码
                qrEncodeOption.Height = height;
                qrEncodeOption.Width = width;
                qrEncodeOption.Margin = 1; // 设置周围空白边距
    
                // 2.生成条形码图片
                BarcodeWriter wr = new BarcodeWriter();
                wr.Format = barcodeFormat; // 二维码 BarcodeFormat.QR_CODE
                wr.Options = qrEncodeOption;
                Bitmap img = wr.Write(codeContent);
    
                // 3.在二维码的Bitmap对象上绘制logo图片
                Bitmap logo = Bitmap.FromFile(logoImg) as Bitmap;
                Graphics g = Graphics.FromImage(img);
                Rectangle logoRec = new Rectangle(); // 设置logo图片的大小和绘制位置
                logoRec.Width = img.Width / 6;
                logoRec.Height = img.Height / 6;
                logoRec.X = img.Width / 2 - logoRec.Width / 2; // 中心点
                logoRec.Y = img.Height / 2 - logoRec.Height / 2;
                g.DrawImage(logo, logoRec);
    
                // 4.保存绘制后的图片
                img.Save(imgPath, imgType);
                return imgPath;
            }

     实例效果,代码略

    转载于:https://www.cnblogs.com/YYkun/p/10307185.html

    展开全文
  • Java生成二维码

    2019-06-17 09:05:45
    Java生成二维码 使用QRCode生成二维码 jar包qrcode.jar public class QRCodeUbil { public void encoderQRCode(String content,String imPath,String imType,int size) throws Exception{ //BufferedImage:内存中...

    Java生成二维码
    使用QRCode生成二维码
    jar包qrcode.jar

    public class QRCodeUbil {
          public void encoderQRCode(String content,String imPath,String imType,int size) throws Exception{
              //BufferedImage:内存中的一张图片
              /**
               *
               */
              BufferedImage bufImg = qRcodeCommon(content,imType,size);
              File file =new File(imPath);
              //生成图片
    
              ImageIO.write(bufImg,imType,file);
          }
          //产生一个二维码的BufferedImage
        public BufferedImage qRcodeCommon(String content ,String imType,int size) throws Exception{
              BufferedImage bufImg = null;
            //Qrcode 对象,字符串->boolean[][]
            Qrcode qrCodeHandler = new Qrcode();
            //设置二维码的排错率;7% L<M<Q<H 30%,排错率越高,可存储的信息越少,但是二维码清晰要求越小
            qrCodeHandler.setQrcodeErrorCorrect('M');
            //可存放的信息类型:N:数字,A:数字加A-Z B:所有
            qrCodeHandler.setQrcodeErrorCorrect('B');
            //尺寸:取值范围:1-40
    
            qrCodeHandler.setQrcodeVersion(size);
            byte[] contentBytes = content.getBytes();
            boolean[][] codeOut = qrCodeHandler.calQrcode(contentBytes);
            int imgSize = 67+12*(size-1);
            bufImg =new BufferedImage(imgSize,imgSize,BufferedImage.TYPE_INT_RGB);
            //创建一个画板
            Graphics2D gs = bufImg.createGraphics();
            gs.setBackground(Color.WHITE);
            gs.clearRect(0,0,imgSize,imgSize);
            gs.setColor(Color.BLACK);
            int pixoff = 2 ;
            for (int j=0;j<codeOut.length;j++){
                for(int i=0;i<codeOut.length;i++){
                    if(codeOut[j][i]){
                        gs.fillRect(j*3+pixoff,i*3+pixoff,3,3);
                    }
    
                }
            }
            //添加图片
          Image logo = ImageIO.read(new File("src/123.png"));
            int maxHeight = bufImg.getHeight();
            int maxWidth = bufImg.getWidth();
    
            gs.drawImage(logo,imgSize/5*2,imgSize/5*2,maxWidth/5,maxHeight/5,null);
            gs.dispose();
            bufImg.flush();
        return bufImg;
        }
        //解析二维码
         public String decodeQRCode(String imPath) throws  Exception{
              BufferedImage bufImg = ImageIO.read(new File(imPath));
              QRCodeDecoder decoder = new QRCodeDecoder();
              TowCode tdcImage =new TowCode(bufImg);
              byte[] bs=decoder.decode(tdcImage);
              String content    =new String(bs,"utf-8");
              return  content;
         }
    

    test

    public class Test {
        public static void main(String[] args) throws Exception {
            String imPath ="d:/二维码/www.png";
            String content = "www.baidu.com";
             QRCodeUbil qrUtil = new QRCodeUbil();
             //生成二维码
             qrUtil.encoderQRCode(content,imPath,"png",10);
             //添加图片
             String imgContent= qrUtil.decodeQRCode(imPath);
             //解析二维码
            System.out.println(imgContent);
        }
    }
    

    解析二维码有时候是字符 ,增大生成二维码的大小就好了。

    展开全文
  • Android 生成二维码

    2017-06-01 18:41:46
    android端快速生成二维码和进行二维码扫描(按照这个方法导入项目很容易实现) Android端最新二维码生成与创建库 当然还有其他更好的方法。 android二维码、条形码分分钟秒杀 实现过程: 在生成二维码点击事件中...
  • } catch (Exception e) { log.error("生成二维码失败!"); throw new AppException("二维码生成失败!"); } } 工具类 /** * 二维码图片的生成 * @param content 链接 * @param qrcode_width 二维码宽 * @param qrcode...
  • Java通过QRCode生成二维码

    千次阅读 热门讨论 2021-03-12 21:44:19
    、前言 QR Code码,是由Denso公司于1994年9月研制的种矩阵二维码符号,它具有维条码及其它二维条码所...1、生成二维码 //加密:文字信息 -> 二维码 public static void encoderQRCode(String content, Stri
  • 生成二维码

    2018-12-12 18:52:24
    //让字符数组生成二维码 boolean[][] b = qrcode.calQrcode(d); //输出内容——>二维码,来控制生成二维码的大小。(只能控制大致范围(最主要的控制),生成的大小还与设置setQrcodeVersion,...
  • 区块链爱好者(QQ:53016353) 数字货币的qt钱包、multbit钱包,blockchain在线...在“请求”页面,我们可以生成二维码,例如,所示二维码的扫描结果是bitcoin:1KZgtUrWZGuAmjRR8HEeuZtMGT3Wqutc1a?amount=1&label=
  • 生成二维码的步骤: 1.导入CoreImage框架 2.通过滤镜CIFilter生成二维码 二维码的内容(传统的条形码只能放数字): 纯文本 名片 URL 生成二维码示例代码如下: // 1.实例化二维码滤镜CIFilter *filter = ...
  • Android 生成二维码

    2019-11-23 15:24:21
    不多说,直接上代码,不懂的可以留言私聊 public class QRCodeUtil { /** * 生成自定义二维码 * * @param content 字符内容 * @param width 二维码宽度 * @param height ...
  • 读取excel批量生成二维码

    千次阅读 2017-12-26 10:53:15
    读取excel,批量生成二维码.简化工作量 偷懒的好办法.
  • java后台生成二维码

    2018-09-23 10:00:37
    java后台生成二维码 导包 写入生成二维码的函数 public static BufferedImage encodeImage(String contents){ BufferedImage image = null; try { Qrcode qrcode = new Qrcode(); /***...
  • Java代码生成二维码

    2019-12-13 13:33:55
    前几天做了个智能通行,要求我接收硬件生成卡号让我用Java代码生成二维码,在和硬件对接实现扫描开门 (1)大概流程就是 1、手机app发送请求给我后端, 2、我后端收到请求后,通过kafka消息列队在去请求硬件给我卡号 3...
  • Java使用QRCode生成二维码

    千次阅读 2018-09-24 12:06:25
    1.二维码生成可以使用zxing和QRCode,本次使用Java+QRCode生成二维码 2.创建工程需要导入QRCode的开发jar包,下载链接:https://pan.baidu.com/s/1lUqrd7ooMu-DyhV_mTLjDg  提取码:rpmo 二、工程代码 ...
  • 使用zxing生成二维码

    2016-12-15 09:40:20
    使用zxing批量在做好的立牌背景图的指定位置上,把指定的文本内容(链接地址、文本等)生成二维码并放在该位置, 最后加上立牌编号。 步骤: 1).做好背景图,如下图: 2).生成二维码BufferedImage对象。...
  • 在现在的项目中,较多的使用到二维码,现在介绍个第三方组件,用于生成二维码生成二维码:///<summary> ///生成二维码 ///</summary> ///<paramname="content">带生成二维码的字符</...
  • java代码生成二维码

    2017-09-15 12:28:55
    java两种方式生成二维码 种通过zxing生成与解析只引入zxing3.2.1.jar 种引入qrcode.jarimport java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; ...
  • 于是就开始各种搜索,最终自己也利用Google的ZXing工具完成了生成二维码和解析二维码的简单程序。 、 二维码生成原理(即工作原理) 二维码官方叫版本Version。Version 1是21 x 21的矩阵,Version 2是 25 x ...
  • js实现特定字符生成二维码
  • 在现在的项目中,较多的使用到二维码,前面介绍过篇使用Gma生成二维码的操作,现在介绍个第三方组件,主要介绍生成二维码,二维码的解析,以及对二维码的相关信息的选择,现在介绍ThoughtWorks用于生成二维码,...
  • .ZXing.Net 源代码地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如图: 说明:ZXing是个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、...二、生成二维码...
  • 使用zxing批量生成二维码立牌

    千次阅读 热门讨论 2016-12-14 16:36:41
    使用zxing批量在做好的立牌背景图的指定位置上,把指定的文本内容(链接地址、文本等)生成二维码并放在该位置, 最后加上立牌编号。
  • php生成二维码

    2018-07-04 14:48:20
    最简单最实例的goolge开源方法1.google开放api代码如下:$urlToEncode="... /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param string $ch...
  • 基于Qrcode.jar实现... 基于qrcode实现的二维码需要两个jar包 个是用来生成二维码个是用来解析二维码, 本文是实现扫描电子签名,保存本地电话簿的个二维码生成,下篇讲解如何实现二维码的解析。二...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,144
精华内容 2,857
关键字:

一串数字生成二维码