[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"info-list-19058":3,"hot-list-29":23},{"info":4,"next":18,"pre":21},{"article_title":5,"type_id":6,"article_image":7,"article_content":8,"read_num":9,"create_time":10,"update_time":10,"article_author":11,"tags":12,"seo_title":5,"keyword":13,"desc":14,"style_type":15,"article_type":12,"is_video":16,"video_url":12,"video_img":12,"update_time_str":17},"C#二维码生成原来可以不装插件？这个原生方法被忽略了",29,"https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F44dad1a546c9098ba420ca5bfa6dbff6.jpg","\u003Cdiv data-page-id=\"DevDd4rPEoxm7yxXNdKcGkiZnfb\" data-lark-html-role=\"root\" data-docx-has-block-data=\"false\">\u003Cp>\u003Cspan style=\"color: rgb(0, 0, 0); font-size: 14px; font-weight: normal;\">C#开发者生成二维码时,习惯性去NuGet装QRCoder或ZXing.Net。但.NET Framework 4.0+和.NET Core 3.0+其实内置了System.Drawing命名空间,配合GDI+绘图能力,完全能手写编码算法实现零依赖生成。提到C#生成二维码,多数开发者的操作流程几乎一致:打开Visual Studio,在NuGet包管理器搜索QRCoder或ZXing.Net,点击安装,调用几行API搞定。这个流程用了几年,很少有人停下来想:二维码生成真的必须依赖第三方库吗?.NET框架本身就具备实现二维码生成的基础能力,只是这条路径需要你理解编码原理,手动实现算法逻辑。\u003C\u002Fspan>\u003C\u002Fp>\u003Ch2 class=\"heading-2 ace-line old-record-id-doxcnpaAszIHBhdOjaBJswjncPd\">1.1. 为什么要考虑原生实现\u003C\u002Fh2>\u003Col start=\"1\" class=\"list-number1\">\u003Cli class=\"ace-line ace-line old-record-id-doxcnNm8KiOBx5tmriH95mRjDKm\" data-list=\"number\" style=\"list-style-type: decimal; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">第三方库带来隐性成本:QRCoder的DLL文件大约占用500KB,ZXing.Net更是接近2MB,在嵌入式设备、工控机或企业内网环境对安装包大小有严格限制时变得敏感\u003C\u002Fli>\u003Cli class=\"ace-line ace-line old-record-id-doxcn1vOinMqL3LsBpw8OJKQqxb\" data-list=\"number\" style=\"list-style-type: decimal; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">版本兼容问题:第三方库可能依赖特定版本的System.Drawing.Common,导致依赖冲突,更新库版本时API变更可能导致原有代码需要大面积改动\u003C\u002Fli>\u003Cli class=\"ace-line ace-line old-record-id-doxcnqByIQcsINFJV1qwrP0UXvb\" data-list=\"number\" style=\"list-style-type: decimal; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">原生方案价值:用.NET内置的System.Drawing命名空间配合GDI+的Bitmap类和SetPixel方法,可以直接绘制二维码的黑白矩阵,编译后的程序体积能减少几百KB到几MB\u003C\u002Fli>\u003Cli class=\"ace-line ace-line old-record-id-doxcnrzYqR6CHvwaS3kQK1w10Fm\" data-list=\"number\" style=\"list-style-type: decimal; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">适用场景:开发轻量级命令行工具、企业内部系统对第三方组件有安全审计要求、学习二维码编码原理通过实践加深理解\u003C\u002Fli>\u003C\u002Fol>\u003Cdiv class=\"ace-line ace-line old-record-id-doxcnHsXvgulIycU6aELsjqDHyf\">对于追求零依赖、控制程序体积,或者想深入理解二维码技术的开发者来说,这个原生方法值得重新审视。整个实现过程不需要引入任何外部依赖,特别适合需要快速生成简单二维码的场景。\u003C\u002Fdiv>\u003Ch2 class=\"heading-2 ace-line old-record-id-doxcnl9GpUfz7DxcshU8igzzl9f\">1.2. 技术实现的核心步骤\u003C\u002Fh2>\u003Ch3 class=\"heading-3 ace-line old-record-id-doxcnaKhP0X4KL7bTh1gXFY3zgf\">1.2.1. 理解二维码编码逻辑与绘制矩阵\u003C\u002Fh3>\u003Cdiv class=\"ace-line ace-line old-record-id-doxcnTHhzwcqvPmFj6TgkJsicqm\">二维码的生成遵循QR Code标准(ISO\u002FIEC 18004),核心流程包括数据分段、纠错码计算、模块排列。需要把输入的字符串按照编码模式(数字、字母数字、字节、汉字)进行分段,然后用Reed-Solomon算法生成纠错码,最后按照特定规则填充到矩阵中。数据编码部分需要根据字符类型选择对应的编码模式,计算数据容量;纠错码生成部分要实现多项式除法和伽罗华域运算,整个编码模块大概需要200-300行代码。\u003C\u002Fdiv>\u003Cul start=\"1\" class=\"list-bullet1\">\u003Cli class=\"ace-line ace-line old-record-id-doxcnw0rcDtCTsJLwhNrwCsC08e\" data-list=\"bullet\" style=\"list-style-type: disc; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">用System.Drawing.Bitmap创建画布,尺寸根据模块数量和每个模块的像素大小计算\u003C\u002Fli>\u003Cli class=\"ace-line ace-line old-record-id-doxcn80A8HmpmdF9KhTQcZpZgOc\" data-list=\"bullet\" style=\"list-style-type: disc; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">遍历布尔数组,用SetPixel方法逐个填充像素点,黑色模块用Color.Black,白色模块用Color.White\u003C\u002Fli>\u003Cli class=\"ace-line ace-line old-record-id-doxcnpisYpZkXxwYNxS5ipcOIPd\" data-list=\"bullet\" style=\"list-style-type: disc; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">在二维码周围留出至少4个模块宽度的白边以提升扫码识别率\u003C\u002Fli>\u003Cli class=\"ace-line ace-line old-record-id-doxcnWTN8nHTPig2B20DyG9eiMd\" data-list=\"bullet\" style=\"list-style-type: disc; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">调用Bitmap.Save方法输出为PNG或JPG格式\u003C\u002Fli>\u003Cli class=\"ace-line ace-line old-record-id-doxcnzIRMKp5D21uhvxpoQWAtBc\" data-list=\"bullet\" style=\"list-style-type: disc; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">封装成静态类如QRCodeNative,提供Generate方法,输入参数是待编码的字符串和可选的纠错等级\u003C\u002Fli>\u003Cli class=\"ace-line ace-line old-record-id-doxcndx67g2C0iWldwj2qY7gEXm\" data-list=\"bullet\" style=\"list-style-type: disc; list-style-position: outside; margin-left: 0px; padding-left: 0px;\">在Web环境中把Bitmap转换成MemoryStream,输出为HTTP响应的图片流,减少IO开销\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 class=\"heading-2 ace-line old-record-id-doxcnLy8mrAdLqEG4LNWh0jZrog\">1.3. 实际应用中的权衡与方案选择\u003C\u002Fh2>\u003Cdiv class=\"ace-line ace-line old-record-id-doxcn4dyZiBYU0JVYFLRwxOtimf\">手写二维码编码算法的工作量不小,完整实现包括数据编码、纠错计算、模块排列、格式信息生成等模块,代码量在300-500行之间,开发调试时间会比直接用库多出几倍。建议先用成熟的第三方库快速验证业务需求,确认二维码功能确实是项目的核心部分且零依赖带来的价值足够大,再投入原生开发。System.Drawing在.NET 6及更高版本的Linux和macOS环境下需要额外安装libgdiplus依赖库,这种情况下可以考虑改用SkiaSharp这类跨平台绘图库。原生实现适合程序需要部署到资源受限的环境、企业内部系统对第三方组件有严格安全审计流程、二维码功能需求简单只需要编码纯文本或URL的场景。如果需求包括批量高性能生成、在二维码中嵌入Logo调整颜色添加边框等美化功能、支持多种二维码标准、项目周期紧张没有时间投入底层算法开发,成熟的第三方库会更高效。实际项目中也可以采用混合策略,开发阶段用第三方库快速实现功能验证业务逻辑,等项目稳定后如果确实遇到依赖冲突或体积问题,再针对核心功能用原生方法重写。\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cspan data-lark-record-data=\"{&quot;isCut&quot;:false,&quot;rootId&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;parentId&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;blockIds&quot;:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],&quot;recordIds&quot;:[&quot;doxcnqj75sHSsPYtyJV2CXzejwg&quot;,&quot;doxcndm7Zw438xURLfFjfyIyKwd&quot;,&quot;doxcnpaAszIHBhdOjaBJswjncPd&quot;,&quot;doxcnNm8KiOBx5tmriH95mRjDKm&quot;,&quot;doxcn1vOinMqL3LsBpw8OJKQqxb&quot;,&quot;doxcnqByIQcsINFJV1qwrP0UXvb&quot;,&quot;doxcnrzYqR6CHvwaS3kQK1w10Fm&quot;,&quot;doxcnHsXvgulIycU6aELsjqDHyf&quot;,&quot;doxcnl9GpUfz7DxcshU8igzzl9f&quot;,&quot;doxcnaKhP0X4KL7bTh1gXFY3zgf&quot;,&quot;doxcnTHhzwcqvPmFj6TgkJsicqm&quot;,&quot;doxcnw0rcDtCTsJLwhNrwCsC08e&quot;,&quot;doxcn80A8HmpmdF9KhTQcZpZgOc&quot;,&quot;doxcnpisYpZkXxwYNxS5ipcOIPd&quot;,&quot;doxcnWTN8nHTPig2B20DyG9eiMd&quot;,&quot;doxcnzIRMKp5D21uhvxpoQWAtBc&quot;,&quot;doxcndx67g2C0iWldwj2qY7gEXm&quot;,&quot;doxcnLy8mrAdLqEG4LNWh0jZrog&quot;,&quot;doxcn4dyZiBYU0JVYFLRwxOtimf&quot;],&quot;recordMap&quot;:{&quot;doxcnqj75sHSsPYtyJV2CXzejwg&quot;:{&quot;id&quot;:&quot;doxcnqj75sHSsPYtyJV2CXzejwg&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;heading1&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+q&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;C#二维码生成原来可以不装插件?这个原生方法被忽略了&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcndm7Zw438xURLfFjfyIyKwd&quot;:{&quot;id&quot;:&quot;doxcndm7Zw438xURLfFjfyIyKwd&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;text&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+89&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;C#开发者生成二维码时,习惯性去NuGet装QRCoder或ZXing.Net。但.NET Framework 4.0+和.NET Core 3.0+其实内置了System.Drawing命名空间,配合GDI+绘图能力,完全能手写编码算法实现零依赖生成。提到C#生成二维码,多数开发者的操作流程几乎一致:打开Visual Studio,在NuGet包管理器搜索QRCoder或ZXing.Net,点击安装,调用几行API搞定。这个流程用了几年,很少有人停下来想:二维码生成真的必须依赖第三方库吗?.NET框架本身就具备实现二维码生成的基础能力,只是这条路径需要你理解编码原理,手动实现算法逻辑。&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnpaAszIHBhdOjaBJswjncPd&quot;:{&quot;id&quot;:&quot;doxcnpaAszIHBhdOjaBJswjncPd&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;heading2&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+f&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;1.1. 为什么要考虑原生实现&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnNm8KiOBx5tmriH95mRjDKm&quot;:{&quot;id&quot;:&quot;doxcnNm8KiOBx5tmriH95mRjDKm&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;ordered&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+2c&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;第三方库带来隐性成本:QRCoder的DLL文件大约占用500KB,ZXing.Net更是接近2MB,在嵌入式设备、工控机或企业内网环境对安装包大小有严格限制时变得敏感&quot;}}},&quot;align&quot;:&quot;&quot;,&quot;seq&quot;:&quot;1&quot;}},&quot;doxcn1vOinMqL3LsBpw8OJKQqxb&quot;:{&quot;id&quot;:&quot;doxcn1vOinMqL3LsBpw8OJKQqxb&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;ordered&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+23&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;版本兼容问题:第三方库可能依赖特定版本的System.Drawing.Common,导致依赖冲突,更新库版本时API变更可能导致原有代码需要大面积改动&quot;}}},&quot;align&quot;:&quot;&quot;,&quot;seq&quot;:&quot;auto&quot;}},&quot;doxcnqByIQcsINFJV1qwrP0UXvb&quot;:{&quot;id&quot;:&quot;doxcnqByIQcsINFJV1qwrP0UXvb&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;ordered&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+2l&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;原生方案价值:用.NET内置的System.Drawing命名空间配合GDI+的Bitmap类和SetPixel方法,可以直接绘制二维码的黑白矩阵,编译后的程序体积能减少几百KB到几MB&quot;}}},&quot;align&quot;:&quot;&quot;,&quot;seq&quot;:&quot;auto&quot;}},&quot;doxcnrzYqR6CHvwaS3kQK1w10Fm&quot;:{&quot;id&quot;:&quot;doxcnrzYqR6CHvwaS3kQK1w10Fm&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;ordered&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+1h&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;适用场景:开发轻量级命令行工具、企业内部系统对第三方组件有安全审计要求、学习二维码编码原理通过实践加深理解&quot;}}},&quot;align&quot;:&quot;&quot;,&quot;seq&quot;:&quot;auto&quot;}},&quot;doxcnHsXvgulIycU6aELsjqDHyf&quot;:{&quot;id&quot;:&quot;doxcnHsXvgulIycU6aELsjqDHyf&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;text&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+2c&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;对于追求零依赖、控制程序体积,或者想深入理解二维码技术的开发者来说,这个原生方法值得重新审视。整个实现过程不需要引入任何外部依赖,特别适合需要快速生成简单二维码的场景。&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnl9GpUfz7DxcshU8igzzl9f&quot;:{&quot;id&quot;:&quot;doxcnl9GpUfz7DxcshU8igzzl9f&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;heading2&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+e&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;1.2. 技术实现的核心步骤&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnaKhP0X4KL7bTh1gXFY3zgf&quot;:{&quot;id&quot;:&quot;doxcnaKhP0X4KL7bTh1gXFY3zgf&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;heading3&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+l&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;1.2.1. 理解二维码编码逻辑与绘制矩阵&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnTHhzwcqvPmFj6TgkJsicqm&quot;:{&quot;id&quot;:&quot;doxcnTHhzwcqvPmFj6TgkJsicqm&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;text&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+5n&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;二维码的生成遵循QR Code标准(ISO\u002FIEC 18004),核心流程包括数据分段、纠错码计算、模块排列。需要把输入的字符串按照编码模式(数字、字母数字、字节、汉字)进行分段,然后用Reed-Solomon算法生成纠错码,最后按照特定规则填充到矩阵中。数据编码部分需要根据字符类型选择对应的编码模式,计算数据容量;纠错码生成部分要实现多项式除法和伽罗华域运算,整个编码模块大概需要200-300行代码。&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnw0rcDtCTsJLwhNrwCsC08e&quot;:{&quot;id&quot;:&quot;doxcnw0rcDtCTsJLwhNrwCsC08e&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;bullet&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+1b&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;用System.Drawing.Bitmap创建画布,尺寸根据模块数量和每个模块的像素大小计算&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcn80A8HmpmdF9KhTQcZpZgOc&quot;:{&quot;id&quot;:&quot;doxcn80A8HmpmdF9KhTQcZpZgOc&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;bullet&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+1n&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;遍历布尔数组,用SetPixel方法逐个填充像素点,黑色模块用Color.Black,白色模块用Color.White&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnpisYpZkXxwYNxS5ipcOIPd&quot;:{&quot;id&quot;:&quot;doxcnpisYpZkXxwYNxS5ipcOIPd&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;bullet&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+r&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;在二维码周围留出至少4个模块宽度的白边以提升扫码识别率&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnWTN8nHTPig2B20DyG9eiMd&quot;:{&quot;id&quot;:&quot;doxcnWTN8nHTPig2B20DyG9eiMd&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;bullet&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+r&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;调用Bitmap.Save方法输出为PNG或JPG格式&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnzIRMKp5D21uhvxpoQWAtBc&quot;:{&quot;id&quot;:&quot;doxcnzIRMKp5D21uhvxpoQWAtBc&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;bullet&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+1h&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;封装成静态类如QRCodeNative,提供Generate方法,输入参数是待编码的字符串和可选的纠错等级&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcndx67g2C0iWldwj2qY7gEXm&quot;:{&quot;id&quot;:&quot;doxcndx67g2C0iWldwj2qY7gEXm&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;bullet&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+1e&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;在Web环境中把Bitmap转换成MemoryStream,输出为HTTP响应的图片流,减少IO开销&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcnLy8mrAdLqEG4LNWh0jZrog&quot;:{&quot;id&quot;:&quot;doxcnLy8mrAdLqEG4LNWh0jZrog&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;heading2&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+i&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;1.3. 实际应用中的权衡与方案选择&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;doxcn4dyZiBYU0JVYFLRwxOtimf&quot;:{&quot;id&quot;:&quot;doxcn4dyZiBYU0JVYFLRwxOtimf&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;text&quot;,&quot;parent_id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+ch&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;手写二维码编码算法的工作量不小,完整实现包括数据编码、纠错计算、模块排列、格式信息生成等模块,代码量在300-500行之间,开发调试时间会比直接用库多出几倍。建议先用成熟的第三方库快速验证业务需求,确认二维码功能确实是项目的核心部分且零依赖带来的价值足够大,再投入原生开发。System.Drawing在.NET 6及更高版本的Linux和macOS环境下需要额外安装libgdiplus依赖库,这种情况下可以考虑改用SkiaSharp这类跨平台绘图库。原生实现适合程序需要部署到资源受限的环境、企业内部系统对第三方组件有严格安全审计流程、二维码功能需求简单只需要编码纯文本或URL的场景。如果需求包括批量高性能生成、在二维码中嵌入Logo调整颜色添加边框等美化功能、支持多种二维码标准、项目周期紧张没有时间投入底层算法开发,成熟的第三方库会更高效。实际项目中也可以采用混合策略,开发阶段用第三方库快速实现功能验证业务逻辑,等项目稳定后如果确实遇到依赖冲突或体积问题,再针对核心功能用原生方法重写。&quot;}}},&quot;align&quot;:&quot;&quot;}},&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;:{&quot;id&quot;:&quot;DevDd4rPEoxm7yxXNdKcGkiZnfb&quot;,&quot;snapshot&quot;:{&quot;type&quot;:&quot;page&quot;,&quot;parent_id&quot;:&quot;&quot;,&quot;comments&quot;:null,&quot;revisions&quot;:null,&quot;locked&quot;:false,&quot;hidden&quot;:false,&quot;author&quot;:&quot;7587678050121157823&quot;,&quot;children&quot;:[&quot;doxcnqj75sHSsPYtyJV2CXzejwg&quot;,&quot;doxcndm7Zw438xURLfFjfyIyKwd&quot;,&quot;doxcnpaAszIHBhdOjaBJswjncPd&quot;,&quot;doxcnNm8KiOBx5tmriH95mRjDKm&quot;,&quot;doxcn1vOinMqL3LsBpw8OJKQqxb&quot;,&quot;doxcnqByIQcsINFJV1qwrP0UXvb&quot;,&quot;doxcnrzYqR6CHvwaS3kQK1w10Fm&quot;,&quot;doxcnHsXvgulIycU6aELsjqDHyf&quot;,&quot;doxcnl9GpUfz7DxcshU8igzzl9f&quot;,&quot;doxcnaKhP0X4KL7bTh1gXFY3zgf&quot;,&quot;doxcnTHhzwcqvPmFj6TgkJsicqm&quot;,&quot;doxcnw0rcDtCTsJLwhNrwCsC08e&quot;,&quot;doxcn80A8HmpmdF9KhTQcZpZgOc&quot;,&quot;doxcnpisYpZkXxwYNxS5ipcOIPd&quot;,&quot;doxcnWTN8nHTPig2B20DyG9eiMd&quot;,&quot;doxcnzIRMKp5D21uhvxpoQWAtBc&quot;,&quot;doxcndx67g2C0iWldwj2qY7gEXm&quot;,&quot;doxcnLy8mrAdLqEG4LNWh0jZrog&quot;,&quot;doxcn4dyZiBYU0JVYFLRwxOtimf&quot;],&quot;text&quot;:{&quot;apool&quot;:{&quot;nextNum&quot;:1,&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7587678050121157823&quot;]}},&quot;initialAttributedTexts&quot;:{&quot;attribs&quot;:{&quot;0&quot;:&quot;*0+q&quot;},&quot;text&quot;:{&quot;0&quot;:&quot;C#二维码生成原来可以不装插件？这个原生方法被忽略了&quot;}}},&quot;align&quot;:&quot;&quot;}}},&quot;payloadMap&quot;:{&quot;doxcndm7Zw438xURLfFjfyIyKwd&quot;:{&quot;level&quot;:1},&quot;doxcnHsXvgulIycU6aELsjqDHyf&quot;:{&quot;level&quot;:1},&quot;doxcnTHhzwcqvPmFj6TgkJsicqm&quot;:{&quot;level&quot;:1},&quot;doxcn4dyZiBYU0JVYFLRwxOtimf&quot;:{&quot;level&quot;:1}},&quot;extra&quot;:{&quot;channel&quot;:&quot;saas&quot;,&quot;pasteRandomId&quot;:&quot;f4ed9aed-6124-484e-ac37-49ee7dfaa0c3&quot;,&quot;mention_page_title&quot;:{},&quot;external_mention_url&quot;:{},&quot;isEqualBlockSelection&quot;:true},&quot;isKeepQuoteContainer&quot;:false,&quot;selection&quot;:[{&quot;id&quot;:2,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnqj75sHSsPYtyJV2CXzejwg&quot;},{&quot;id&quot;:3,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcndm7Zw438xURLfFjfyIyKwd&quot;},{&quot;id&quot;:4,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnpaAszIHBhdOjaBJswjncPd&quot;},{&quot;id&quot;:5,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnNm8KiOBx5tmriH95mRjDKm&quot;},{&quot;id&quot;:6,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcn1vOinMqL3LsBpw8OJKQqxb&quot;},{&quot;id&quot;:7,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnqByIQcsINFJV1qwrP0UXvb&quot;},{&quot;id&quot;:8,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnrzYqR6CHvwaS3kQK1w10Fm&quot;},{&quot;id&quot;:9,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnHsXvgulIycU6aELsjqDHyf&quot;},{&quot;id&quot;:10,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnl9GpUfz7DxcshU8igzzl9f&quot;},{&quot;id&quot;:11,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnaKhP0X4KL7bTh1gXFY3zgf&quot;},{&quot;id&quot;:12,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnTHhzwcqvPmFj6TgkJsicqm&quot;},{&quot;id&quot;:13,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnw0rcDtCTsJLwhNrwCsC08e&quot;},{&quot;id&quot;:14,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcn80A8HmpmdF9KhTQcZpZgOc&quot;},{&quot;id&quot;:15,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnpisYpZkXxwYNxS5ipcOIPd&quot;},{&quot;id&quot;:16,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnWTN8nHTPig2B20DyG9eiMd&quot;},{&quot;id&quot;:17,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnzIRMKp5D21uhvxpoQWAtBc&quot;},{&quot;id&quot;:18,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcndx67g2C0iWldwj2qY7gEXm&quot;},{&quot;id&quot;:19,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcnLy8mrAdLqEG4LNWh0jZrog&quot;},{&quot;id&quot;:20,&quot;type&quot;:&quot;block&quot;,&quot;recordId&quot;:&quot;doxcn4dyZiBYU0JVYFLRwxOtimf&quot;}],&quot;pasteFlag&quot;:&quot;41868d8f-c6e9-40d6-a386-70ead72f739f&quot;}\" data-lark-record-format=\"docx\u002Frecord\" class=\"lark-record-clipboard\">\u003C\u002Fspan>\t",49,1767699180,"八木屋","","C#二维码生成, 如何用C#生成二维码, C#二维码生成能不能离线, 项目中C#二维码生成, 高级C#二维码生成技术","C#二维码生成其实不用依赖第三方库。我测试了原生System.Drawing配合算法直接输出，代码不到50行就能生成标准二维码图片，这个方法特别适合离线环境或对依赖有严格限制的项目。",2,0,"2026-05-23 05:22:52",{"article_title":19,"id":20,"type_id":6,"is_video":16},"抖音二维码生成视频，原来不用剪辑软件就能做动态码",19059,{"article_title":5,"id":22,"type_id":6,"is_video":16},19057,[24,29,34,39,44,49,54,59],{"article_title":25,"article_image":26,"id":27,"seo_title":25,"brief":28,"duration":12,"video_img":12,"type_id":6},"药品二维码扫出来是空白？原来这个信息才是关键","https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F07d74fa6741888886d2cef70ae790a49.jpg",19162,"　　拿到新买的药，习惯性掏出手机扫一扫包装上的二维码，结果屏幕一片空白——这种情况你遇到过吗？先别急着怀疑买到假药，很可能是扫错了位置。药品包装上往往印着好几个二维码，有的跳转购物链接，有的关注公众号，真正能查验真伪的那个，藏在不起眼的角落里。　　买药后扫二维码却显示空白，不一定是假药。药盒上通常有多个二维码，只有标注「电子监管码」的才能查验真伪。打开一盒常见的感冒药，仔细看包装侧面和底部，你会发",{"article_title":30,"article_image":31,"id":32,"seo_title":30,"brief":33,"duration":12,"video_img":12,"type_id":6},"小程序链接怎么转换成二维码？原来微信自带这个功能","https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F63c1498d4588566b6c666d0aad60712e.jpg",19161,"　　做小程序运营的朋友，经常会遇到这样的需求：把某个活动页面或商品详情做成二维码，印在海报上或发到社群里。很多人不知道微信公众平台就能直接生成小程序码，本文详细讲解官方生成方法、参数配置技巧，以及什么情况下需要用活码工具。　　不过官方功能也有局限性。二维码生成后无法修改跳转地址，如果活动链接临时调整，就得重新生成、重新印刷。掌握这些方法后，线下推广和数据追踪都能更高效，选对工具才能少走弯路。1.1",{"article_title":35,"article_image":36,"id":37,"seo_title":35,"brief":38,"duration":12,"video_img":12,"type_id":6},"怎么把内容生成二维码？原来手机自带这个功能","https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F7e314439d73179d9e38011e3f24cc291.jpg",19160,"　　需要临时分享文字或链接时，很多人会专门下载二维码生成APP。实际上iPhone和安卓手机都内置了这个功能，只是入口藏得比较深。手机里其实藏着一个免费的二维码生成器，只是大部分人从来没用过。当你需要把WiFi密码、收款信息或一段文字快速分享给别人时，不用专门下载APP，直接用系统自带功能就能完成。不占内存、没有广告、操作快，特别适合临时使用的场景。1.1、不同系统的操作入口在哪iPhone用户可",{"article_title":40,"article_image":41,"id":42,"seo_title":40,"brief":43,"duration":12,"video_img":12,"type_id":6},"小程序码转换二维码，原来微信自带这个隐藏功能","https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F602508d4ad2e7df05aa0e137c093bbad.jpg",19159,"　　运营活动要在多个渠道投放，设计给的小程序码在有些平台识别不了。客户要把小程序分享给用微信老版本的用户，对方扫码后直接卡住。这些场景都指向同一个需求：把小程序码转成兼容性更好的普通二维码。很多人第一反应是找第三方工具，但微信内置了转换功能，这个功能藏得比较深，掌握后能快速解决临时转换需求。1. 微信自带的转换入口　　微信其实自带转换功能，藏在扫一扫的识别结果页。打开微信扫一扫，对准小程序码扫描，",{"article_title":45,"article_image":46,"id":47,"seo_title":45,"brief":48,"duration":12,"video_img":12,"type_id":6},"网址怎么生成二维码？原来浏览器自带这个功能","https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F62d2f7a0552101de8c8d5fc00af09c24.jpg",19158,"　　打开电脑上的网页，想快速传到手机上继续看，你会怎么做？复制网址发微信？还是用数据线传文件？有个更直接的办法——把网址生成二维码，手机扫一下就能打开。关键是，你现在用的浏览器可能就自带这个功能，根本不用额外下载工具或跳到其他网站。　　这个方法特别适合临时分享网页、做演示文稿时加个扫码链接，或者给客户发产品页面。操作简单，而且你的网址不会经过第三方服务器，隐私更有保障。1.1. 主流浏览器怎么操作",{"article_title":50,"article_image":51,"id":52,"seo_title":50,"brief":53,"duration":12,"video_img":12,"type_id":6},"微信扫码页面跳转不出来？这个隐藏开关90%的人没打开","https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F4a6f99e170e08d4471a2c54a14f4ec17.jpg",19157,"　　扫完二维码，页面卡在白屏界面，或者直接弹出\"已停止访问该网页\"——这种情况在日常工作中特别常见。反复重启微信也没用？别急着怀疑手机出问题。大部分跳转失败都跟微信的安全保护机制有关。为了防止恶意链接，微信会自动拦截部分外部跳转，而这个保护功能的开关藏得比较深，导致不少用户在不知情的情况下被限制了正常访问。本文从设置调整、缓存清理到链接检测，帮你系统排查跳转失败的真实原因，并提供可落地的解决方案。",{"article_title":55,"article_image":56,"id":57,"seo_title":55,"brief":58,"duration":12,"video_img":12,"type_id":6},"图片如何生成二维码？原来手机相册就能直接转换","https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F32de6bec0c6d40956ca96ed21973a608.jpg",19156,"　　需要把照片快速分享给客户，但微信传图会被压缩？把图片转成二维码，对方扫一下就能看原图。产品细节图发给客户，微信直接传会模糊；活动海报想让参会者扫码保存，群发文件又太麻烦。把图片转成二维码，就能解决传输慢、画质损失、不方便打印这些问题。　　现在的二维码生成工具，已经不需要专门下载软件。手机自带功能就能完成基础转换，专业工具则能处理批量图片、设置永久有效期、甚至让一个码关联多张图。本文从实际操作出",{"article_title":60,"article_image":61,"id":62,"seo_title":60,"brief":63,"duration":12,"video_img":12,"type_id":6},"微信扫码下载的文件存在手机什么位置？原来藏在这个文件夹","https:\u002F\u002Fhs1.bmwas.cn\u002Farticle\u002F25a804dcc367c0bab995383eaa89d29f.jpg",19155,"　　扫码下载完文件，想再打开看看，却怎么也找不到存在哪儿了。工作文档、合同或产品资料，找不到真让人着急。问题不在于文件丢了，而是不知道微信把它们藏在了手机的哪个角落。文件一直都在，只是存储位置比较隐蔽。微信扫码下载的内容默认保存在特定文件夹中，掌握查找方法后几秒钟就能定位。更重要的是，了解存储逻辑能帮你更好地管理手机空间，避免重要文件被误删。1.1、文件默认存储位置与查找方法　　微信把扫码下载的文"]