当前位置: 首页 > news >正文

生成小程序的二维码的base64码(中间logo可以自定义)

 1.生成基础二维码

    /*** 生成微信小程序二维码,带参数,最终转成base64* @param page 当前小程序相对页面 必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面* @param scene 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)* @param accessToken 接口调用凭证*/public static String generateQrCode(String page, String scene,String accessToken) {BufferedImage bi= null;try {URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken);HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();httpURLConnection.setRequestMethod("POST");httpURLConnection.setDoOutput(true);httpURLConnection.setDoInput(true);PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());JSONObject paramJson = new JSONObject();paramJson.put("scene", scene);paramJson.put("page", page);paramJson.put("width", 430);paramJson.put("auto_color", false);JSONObject lineColor = new JSONObject();lineColor.put("r", 0);lineColor.put("g", 0);lineColor.put("b", 0);paramJson.put("line_color", lineColor);printWriter.write(paramJson.toString());printWriter.flush();BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());bi = ImageIO.read(bis);printWriter.close();ByteArrayOutputStream stream = new ByteArrayOutputStream();try {// 设置图片格式ImageIO.write(bi, "jpg", stream);} catch (IOException e) {e.printStackTrace();}byte[] bytes = Base64.encodeBase64(stream.toByteArray());String base64 = new String(bytes);return "data:image/jpeg;base64," + base64;} catch (Exception e) {e.printStackTrace();}return null;}

2.自定义logo

加入以下代码:

            //要替换的图片路径BufferedImage logoImage = ImageIO.read(new URL("https://nk-mall.oss-cn-shenzhen.aliyuncs.com/WDMPV_MP/1698932836550.png"));// logo图的宽高int width = logoImage.getWidth();int height = logoImage.getHeight();// 保存正方形的边长int size = Math.min(width, height);// 判断那条边的边更长// 裁剪:获取正中间的正方形,边长为图片宽的值 后面.size方法必须调用 否则异常logoImage = Thumbnails.of(logoImage).sourceRegion(Positions.CENTER, size, size).size(size, size).asBufferedImage();// 转成圆形logoImage = convertCircular(logoImage);// 缩放:放大微信二维码的底图  目的为了减少对用户上传的图片缩放过小图片失真bi = Thumbnails.of(bi).size(bi.getHeight() * 2, bi.getHeight() * 2).asBufferedImage();// 使用Graphics2D合并图片Graphics2D g2 = null;// 读取微信二维码图片g2 = bi.createGraphics();// 合并:并设置偏移量,logo图片大小。具体需要自己按照实际的大小调整g2.drawImage(logoImage, 232 , 232, 395, 395, null);g2.dispose();

完整代码:

​
/*** 生成微信小程序二维码,带参数,最终转成base64* @param page 当前小程序相对页面 必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面* @param scene 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)* @param accessToken 接口调用凭证*/public static String generateQrCode(String page, String scene,String accessToken) {BufferedImage bi= null;try {URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken);HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();httpURLConnection.setRequestMethod("POST");httpURLConnection.setDoOutput(true);httpURLConnection.setDoInput(true);PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());JSONObject paramJson = new JSONObject();paramJson.put("scene", scene);paramJson.put("page", page);paramJson.put("width", 430);paramJson.put("auto_color", false);JSONObject lineColor = new JSONObject();lineColor.put("r", 0);lineColor.put("g", 0);lineColor.put("b", 0);paramJson.put("line_color", lineColor);printWriter.write(paramJson.toString());printWriter.flush();BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());bi = ImageIO.read(bis);printWriter.close();//要替换的图片路径BufferedImage logoImage = ImageIO.read(new URL("https://nk-mall.oss-cn-shenzhen.aliyuncs.com/WDMPV_MP/1698932836550.png"));// logo图的宽高int width = logoImage.getWidth();int height = logoImage.getHeight();// 保存正方形的边长int size = Math.min(width, height);// 判断那条边的边更长// 裁剪:获取正中间的正方形,边长为图片宽的值 后面.size方法必须调用 否则异常logoImage = Thumbnails.of(logoImage).sourceRegion(Positions.CENTER, size, size).size(size, size).asBufferedImage();// 转成圆形logoImage = convertCircular(logoImage);// 缩放:放大微信二维码的底图  目的为了减少对用户上传的图片缩放过小图片失真bi = Thumbnails.of(bi).size(bi.getHeight() * 2, bi.getHeight() * 2).asBufferedImage();// 使用Graphics2D合并图片Graphics2D g2 = null;// 读取微信二维码图片g2 = bi.createGraphics();// 合并:并设置偏移量,logo图片大小。具体需要自己按照实际的大小调整g2.drawImage(logoImage, 232 , 232, 395, 395, null);g2.dispose();ByteArrayOutputStream stream = new ByteArrayOutputStream();try {// 设置图片格式ImageIO.write(bi, "jpg", stream);} catch (IOException e) {e.printStackTrace();}byte[] bytes = Base64.encodeBase64(stream.toByteArray());String base64 = new String(bytes);return "data:image/jpeg;base64," + base64;} catch (Exception e) {e.printStackTrace();}return null;}​

 

相关文章:

生成小程序的二维码的base64码(中间logo可以自定义)

1.生成基础二维码 /*** 生成微信小程序二维码,带参数,最终转成base64* param page 当前小程序相对页面 必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不…...

【音视频 | Ogg】Ogg封装格式详解——包含Ogg封装过程、数据包(packet)、页(page)、段(segment)等

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

ubuntu 22.04 安装ros2 iron

目录 一、镜像 二、ifconfig 三、ssh连接不上 四、安装iron 一、镜像 123云盘直接下载 二、ifconfig sudo apt install net-tools 三、ssh连接不上 sudo apt install openssh-server 四、安装iron Ubuntu (Debian packages) — ROS 2 Documentation: Iron document…...

PHP语言、B/S手术麻醉临床信息管理系统源码

手术麻醉临床信息管理系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程,实现麻醉手术过程的信息数字化,自动生…...

Win11安装网络打印机

https://support.microsoft.com/zh-cn/windows/%E5%9C%A8-windows-%E4%B8%AD%E5%AE%89%E8%A3%85%E6%89%93%E5%8D%B0%E6%9C%BA-cc0724cf-793e-3542-d1ff-727e4978638b...

逆向学习记录(3)工具介绍jadx、gda和jeb

1、jadx 下载地址如下,目前最新版本为v1.4.7,改成想要下载的版本号就能下载对应的版本。 https://github.com/skylot/jadx/releases/tag/v1.4.7 下载后解压,进入对应路径的bin文件夹内,运行jadx-gui.bat。 2、gda 下载地址和gi…...

C#,数值计算——偏微分方程,Mglin的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Mglin { private int n { get; set; } private int ng { get; set; } private double[,] uj1 { get; set; } private Lis…...

一机服务万人,拓世法宝AI智能商业数字人一体机,解锁文旅新表达

在人工智能的强劲推动下,人们走进了一个令人振奋的数字化时代。如何让文化传承与现代科技完美融合,成为一个十分有趣的议题,当AI技术结合文旅生活,便悄然开启了一种全新的旅游服务模式——AI数字文旅。 在我国国家博物馆、文旅大…...

【源码解析】聊聊SpringBean是如何初始化和创建

我们知道通过类进行修复不同的属性,比如单例、原型等,而具体的流程是怎么样的呢,这一篇我们开始从源码的视角分析以下。 刷新方法 在刷新容器中有一个方法,其实就是 Bean创建的过程。 finishBeanFactoryInitialization(beanFact…...

【0基础学Java第六课】-- 数组的定义与使用

6 数组的定义与使用 6.1 什么是数组6.2 数组的创建及初始化6.2.1 数组的创建:6.2.2 数组的初始化 6.3 数组的使用6.3.1 数组中元素的访问6.3.2 Java中JVM当中的内存划分6.3.3 遍历数组 6.4 数组是引用类型6.4.1 初始JVM的内存分布6.4.2 基本类型变量与引用类型变量的…...

后台项目Gradle打包jar,不包含依赖jar并放到外部路径

# 1.Gradle打包jar # 2.依赖jar包外放到其他目录 # 3.保留引用关系 # 4.去掉引入的缓存build.gradle// 需要放到dependencies下面 // 傻逼问题 1 这个jar打包还得主动开 jar.enabled true // 1.清除上一次的lib目录 task clearJar(type: Delete) {delete "$buildDir\\lib…...

NSSCTF web刷题记录4

文章目录 [NSSRound#4 SWPU]1zweb(revenge)[强网杯 2019]高明的黑客[BJDCTF 2020]Cookie is so subtle![MoeCTF 2021]fake game[第五空间 2021]PNG图片转换器[ASIS 2019]Unicorn shop[justCTF 2020]gofs[UUCTF 2022 新生赛]phonecode[b01lers 2020]Life On Mars[HZNUCTF 2023 f…...

什么是大模型?一文读懂大模型的基本概念

大模型是指具有大规模参数和复杂计算结构的机器学习模型。本文从大模型的基本概念出发,对大模型领域容易混淆的相关概念进行区分,并就大模型的发展历程、特点和分类、泛化与微调进行了详细解读,供大家在了解大模型基本知识的过程中起到一定参…...

数据结构之队的实现

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...

【实战Flask API项目指南】之三 路由和视图函数

实战Flask API项目指南之 路由和视图函数 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 当小菜踏入Flask后端开发的世界时&…...

mediasoup udp端口分配策略

mediasoup-worker多进程启动时&#xff0c;rtcMinPort/rtcMaxPort可以使用相同的配置。 for (let i 0; i < numWorkers; i) { let worker await mediasoup.createWorker({ logLevel: config.mediasoup.worker.logLevel, logTags: config.mediasoup.work…...

山西电力市场日前价格预测【2023-11-07】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-07&#xff09;山西电力市场全天平均日前电价为318.54元/MWh。其中&#xff0c;最高日前电价为514.01元/MWh&#xff0c;预计出现在18: 00。最低日前电价为192.95元/MWh&#xff0c;预计…...

Microsoft Dynamics 365 CE 扩展定制 - 5. 外部集成

本章内容包括: 使用.NET从其他系统连接到Dynamics 365使用OData(Java)从其他系统连接到Dynamics 365使用外部库从外部源检索数据使用web应用程序连接到Dynamics 365运行Azure计划任务设置Azure Service Bus终结点与Azure Service Bus构建近乎实时的集成使用来自Azure服务总线…...

手机升级STM32单片机,pad下载程序,手机固件升级单片机,局域网程序下载,STM32单片机远程下载升级

STM32单片机&#xff0c;是我们最常见的一种MCU。通常我们在使用STM32单片机都会遇到程序在线升级下载的问题。 STM32单片机的在线下载通常需要以下几种方式完成&#xff1a; 1、使用ST提供的串口下载工具&#xff0c;本地完成固件的升级下载。 2、自行完成系统BootLoader的编写…...

【漏洞复现】weblogic-SSRF漏洞

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 漏洞测试注入HTTP头&#xff0c;利用Redis反弹shell 问题解决 Path : vulhub/weblogic/ssrf 编译及启动测试环境 docker compose up -dWeblogic中存在一个SSRF漏洞&#xff0…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...