/// <summary>
        /// 更换小程序码中间的logo
        /// </summary>
        /// <param name="wxQrCodePath">微信接口返回生成的小程序码路径</param>
        /// <param name="storeLogo">拼接进去的图片路径</param>
        /// <param name="savePath">保存路径</param>
        /// <returns></returns>
        public string WxQrCodeDemo(string wxQrCodePath, string storeLogo, string savePath)
        {
            Image mImage = Image.FromFile(wxQrCodePath);
            using (Bitmap bitmap = new Bitmap(mImage))
            {
                Rectangle rec = new Rectangle();
                rec.X = 75;
                rec.Y = 75;
                rec.Width = 130;
                rec.Height = 130;
                using (Graphics g = Graphics.FromImage(bitmap))
                {
                    Pen pen = new Pen(Color.White);
                    g.DrawEllipse(pen, rec);
                    Brush b = new SolidBrush(Color.White);
                    g.FillPath(b, GetRoundRectangle(rec, 65));//中间画白色圆
                }
                bitmap.Save(wxQrCodePath, System.Drawing.Imaging.ImageFormat.Jpeg);//注意保存路径(模板文件)
            }
            mImage.Dispose();
            Image regionImage = Image.FromFile(wxQrCodePath);//模板文件
            Image addImg = Image.FromFile(storeLogo);//需要拼接进去的图片
            Image lastImg = CombinImage(regionImage, addImg, 135);//拼接图片(设置固定的135px-可根据需要改)
            Bitmap lastmap = new Bitmap(lastImg);
            lastmap.Save(savePath, System.Drawing.Imaging.ImageFormat.Png);//注意保存路径
            addImg.Dispose();
            lastmap.Dispose();
            regionImage.Dispose();
            lastImg.Dispose();
            return savePath;

}
        /// <summary> 
        /// 根据普通矩形得到圆角矩形的路径 
        /// </summary> 
        /// <param name="rectangle">原始矩形</param> 
        /// <param name="r">半径</param> 
        /// <returns>图形路径</returns> 
        private static GraphicsPath GetRoundRectangle(Rectangle rectangle, int r)
        {
            int l = 2 * r;
            // 把圆角矩形分成八段直线、弧的组合,依次加到路径中 
            GraphicsPath gp = new GraphicsPath();
            gp.AddLine(new Point(rectangle.X + r, rectangle.Y), new Point(rectangle.Right - r, rectangle.Y));
            gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Y, l, l), 270F, 90F);

gp.AddLine(new Point(rectangle.Right, rectangle.Y + r), new Point(rectangle.Right, rectangle.Bottom - r));
            gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Bottom - l, l, l), 0F, 90F);

gp.AddLine(new Point(rectangle.Right - r, rectangle.Bottom), new Point(rectangle.X + r, rectangle.Bottom));
            gp.AddArc(new Rectangle(rectangle.X, rectangle.Bottom - l, l, l), 90F, 90F);

gp.AddLine(new Point(rectangle.X, rectangle.Bottom - r), new Point(rectangle.X, rectangle.Y + r));
            gp.AddArc(new Rectangle(rectangle.X, rectangle.Y, l, l), 180F, 90F);
            return gp;
        }
        /// <summary>
        /// 获取缩小后的图片
        /// </summary>
        /// <param name="bm">要缩小的图片</param>
        /// <param name="times">要缩小的倍数</param>
        /// <returns></returns>
        private Bitmap GetSmall(Bitmap bm, double times)
        {
            int nowWidth = (int)(bm.Width / times);
            int nowHeight = (int)(bm.Height / times);
            Bitmap newbm = new Bitmap(nowWidth, nowHeight);//新建一个放大后大小的图片

if (times >= 1 && times <= 1.1)
            {
                newbm = bm;
            }
            else
            {
                Graphics g = Graphics.FromImage(newbm);
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                g.SmoothingMode = SmoothingMode.HighQuality;
                g.CompositingQuality = CompositingQuality.HighQuality;
                g.DrawImage(bm, new Rectangle(0, 0, nowWidth, nowHeight), new Rectangle(0, 0, bm.Width, bm.Height), GraphicsUnit.Pixel);
                g.Dispose();
            }
            return newbm;

}

/// <summary>
        /// 调用此函数后使此两种图片合并,类似相册,有个
        /// 背景图,中间贴自己的目标图片
        /// </summary>
        /// <param name="imgBack">粘贴的源图片</param>
        /// <param name="destImg">粘贴的目标图片</param>
        public  Image CombinImage(Image imgBack, Image img, int r)
        {
            Bitmap imgMap = new Bitmap(img);
            double smallTimes = imgMap.Width / r;//缩小图片倍数
            img = GetSmall(imgMap, smallTimes);//进行图片缩小
            if ((img.Width<r || img.Height<r))
            {
                if (img.Width>img.Height)
                {
                    r = img.Height;
                }
                else
                {
                r = img.Width;

}
            }
            img = CutEllipse(img, new Rectangle(0, 0, r, r), new Size(r, r));
            Graphics g = Graphics.FromImage(imgBack);
            g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height); 
            g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Width / 2 - img.Width / 2, img.Width, img.Height);
            GC.Collect();
            g.Dispose();
            img.Dispose();
            return imgBack;
        }

效果如下:

参考:https://www.cnblogs.com/cyj0923/p/9511030.html

}

C# 更换微信小程序码中间的logo图层相关推荐

  1. 关于.NET HttpClient方式获取微信小程序码(二维码

    随着微信小程序的火热应用,市面上有关小程序开发的需求也多了起来.近来分析了一项生成有关生成微信小程序码的需求--要求扫码跳转到小程序指定页面(带参数):看了下小程序官方文档,以及网上的例子,未看到多少 ...

  2. php实现自定义中间logo的微信小程序码

    php实现自定义中间logo的微信小程序码这里写自定义目录标题 小程序码生成的时候是默认使用小程序后台设置的小程序icon图片的,但是在有些场景我们可能要替换成我们自己想要的icon. 下面先放代码: ...

  3. 关于获取微信小程序码的“47001”错误码的坑

    最近在项目组用Java写了一条获取微信小程序码的api,根据微信的接口文档进行一步一步的操作,可就是按照微信的接口文档一步一步来,微信给我返回的结果一直都是47001. {"errcode& ...

  4. 获取微信小程序码传递的参数 / 微信开发者工具模拟扫描小程序码调试

    本文主要介绍如何在微信开发者工具中,模拟微信扫描小程序码打开小程序的场景,进行调试. 二维码调试可以看这篇文章:微信开发者工具模拟扫描二维码调试 添加编译模式 添加一个咱们自定义的编译模式 输入模式名 ...

  5. 微信小程序码中间Logo修改

    步骤: 1.用微信小程序提供的接口获取小程序码 appId, secret->access_token access_token->二维码(https://developers.weixi ...

  6. PHP生成微信小程序码

    直接上代码 <?php$APPID = '微信平台的APPID'; $APPSECRET = '和APPID相匹配的APPSECRET'; //生成access_token $url= &quo ...

  7. php 生成微信小程序码(可携带参数) 永久有效,数量暂无限制

    官方文档入口 一.首先要先获取 access_token,把拿到的token存放在redis中  a.php文件 /*** 获取小程序全局唯一后台接口调用凭据 accessToken* access_ ...

  8. 生成微信小程序码、URL Scheme和URL Link

    通用第一步,获取access_token,需要服务端去获取并缓存 (APPID和APPSECRET在微信小程序后台查看获取) https://api.weixin.qq.com/cgi-bin/tok ...

  9. 实战篇-制作微信小程序码宣传海报

    一.制作前的说明 上一篇文章讲了微信官方提供的动态生成小程序码的一些说明与注意事项. 本篇文章就带大家一起把绘制带参小程序码的宣传海报给画出来以及如何保存已经生成的小程序码,方便下次复用. 注意: 上 ...

最新文章

  1. Elasticsearch-06 Spring Boot 2.0.9整合ElasticSearch5.6.16
  2. vue 页面A转到页面B,B页面停留在A页面的滚动位置
  3. 分布式事务?No, 最终一致性
  4. 直播 | ACL 2021论文解读:提升预训练语言模型实体与关系理解的统一框架
  5. Hyper-V + CentOS7 安装视频教程
  6. javascript arraybuffer
  7. python无法在终端运行程序_解决项目pycharm能运行,在终端却无法运行的问题
  8. 如何在隐藏视图时使用自动布局移动其他视图?
  9. 知乎被爆裁员20%锤子60%,BAT裁员缩招为啥急于否认?
  10. 跑跑卡丁车手游怎么用电脑玩 跑跑卡丁车模拟器玩法教程
  11. 线性代数笔记33——基变换和图像压缩
  12. speedoffice表格中如何查找重复内容
  13. 游戏建模小白必看的游戏人物模型贴图制作方法及制作小技巧
  14. autocad网络服务器如何安装许可证,使用网络许可选项文件的步骤
  15. AOP切面获取参数的一个小技巧
  16. 搜狗输入法更换字体与皮肤
  17. thinkphp框架源码交易系统资源网站源码
  18. 对于昨夜梦里对某外网电商平台web渗透测试总结体会
  19. 《进击的虫师》当图虫遇到爬虫
  20. linux搭建代理服务器+蚁剑配置客户端代理

热门文章

  1. #1.从学生表中查询所有学生的所有信息SELECT * FROM `student`#2.从学生表查询所有学生的学号姓名信息并分别赋予别名SELECT StudentNo AS ‘学号‘, St
  2. [1304]求圆的周长和面积(Java)
  3. qgis面图层周长面积计算(视频)
  4. 开关电源的EMC干扰不知道是怎么产生的?(开关电源EMC探析)
  5. ff14 人最多的服务器,记录FF14全服人数最少的服务器红茶川
  6. C#装箱(Boxing)和拆箱(Unboxing)
  7. 笔记本电脑合盖无法休眠,开盖黑屏
  8. java实现汉字判断+中文符号判断
  9. 59. 建立正序链表
  10. 【大数据面试题】(五)Spark 相关面试题总结