邮件正文添加图片,设置图片大小,分割图片

news/2025/3/22 10:10:16/文章来源:https://www.cnblogs.com/duixue/p/18786270

背景

邮件中需要发送一些图片报表,报表长宽比过大, 长度 1800,宽 8000,此时发送到邮件显示的图片宽度过小。此时在HTML设置长宽等参数无效

解决方案

尝试发送一张 1000 * 1000的图片,设置图片的长宽各为1000,此时在邮件中显示正常。

使用代码将图片进行分割,除了最后一张图片,所以图片的高度都为1000,接图片分割之后插入到HTML模板中,发送到邮箱。

代码

1、先将base64转图片
        public Image ConvertBase64ToImage(string base64String){byte[] imageBytes = Convert.FromBase64String(base64String);using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length)){ms.Write(imageBytes, 0, imageBytes.Length);Image image = Image.FromStream(ms, true);return image;}}

2、计算长宽比,按照图片宽度1000的比例

var ratio = img.Width / 1000.0;
img = ResizeImage(img, 1000, Convert.ToInt32(img.Height / ratio));

3、重新设置图片大小,按照图片宽度1000生成

        public Bitmap ResizeImage(Image originalImage, int maxWidth, int maxHeight){int originalWidth = originalImage.Width;int originalHeight = originalImage.Height;float aspectRatio = (float)originalWidth / (float)originalHeight;int resizedWidth = maxWidth;int resizedHeight = (int)(maxWidth / aspectRatio);if (resizedHeight > maxHeight){resizedHeight = maxHeight;resizedWidth = (int)(maxHeight * aspectRatio);}Bitmap resizedImage = new Bitmap(resizedWidth, resizedHeight);using (Graphics graphics = Graphics.FromImage(resizedImage)){graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;graphics.DrawImage(originalImage, 0, 0, resizedWidth, resizedHeight);}return resizedImage;}
4、计算需要分割几张图片
var count = Math.Ceiling(img.Height / 1000.0);
5、生成分割的图片并转 Base64字符串
            List<Image> imgs = new List<Image>();var builder = new StringBuilder();for (int i = 0; i < count; i++){var height = 1000;var width = 1000;if ((i + 1) == count){height = img.Height - i * 1000;}var temp = CropImage(img, new Rectangle(0, i * 1000, width, height));//temp.Save(@"C:\myfiles\" + i + ".png");var imgBase64Str = ImageToBase64(temp);builder.Append($"<img width=\"{width}\" height=\"{height}\"  src=\"data:image/png;base64,{imgBase64Str}\" />");}
6、将生成的小图转Base64
        public string ImageToBase64(Image image){using (MemoryStream ms = new MemoryStream()){image.Save(ms, ImageFormat.Jpeg);byte[] imageBytes = ms.ToArray();return Convert.ToBase64String(imageBytes);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/903374.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建一个2.4GHz无线网络分析仪,可兼作远程(LoRa)收发器

快速预览 呈现DualCast !我最新的(也是最先进的)项目。它是一种紧凑型无线设备,除了能够通过LoRa技术发送915MHz AES-128加密的远程命令外,还能够分析2.4GHz Wi-Fi网络上的实时流量。(默认设置下最高可达一公里!)翻转180以激活Wi-Fi模式。此外,它还配备了许多传感器,如用于…

Vue3 关闭vueDevTools工具

1、文件 vite.config.ts 2、注释

SecureCRT SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输

SecureCRT & SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输SecureCRT & SecureFX 9.6.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输 rock-solid terminal emulation & flexible secure file transfer for com…

deepseek模型部署到本地使用+投喂数据训练

近期,由于国外大量攻击,导致 DeepSeek 经常无法使用;另外,许多朋友希望在本地搭建自己的知识库,以保护自己的资料不被外泄。因此,越来越多的人希望能够在本地部署 DeepSeek,但对于技术难度有所担忧。别担心,这篇教程将为你扫清所有障碍!从环境搭建到模型运行,每一步都…

Axure RP上使用 Font Awesome 图标库

Axure RP 可以使用 Web Fonts,这让置入 Font Awesome 变得非常方便。Font Awesome 是一种字体,只是主要针对图标使用,而非我们所熟知的中文/西文字体。 进行简单的几步设置,就可以在自己项目上面使用 Font Awesome 的 1609 个免费图标。图标覆盖广泛,风格也相对统一。 一、…

读DAMA数据管理知识体系指南27文件和内容管理概念(上)

读DAMA数据管理知识体系指南27文件和内容管理概念(上)1. 文件和内容管理 1.1. 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理 1.2. 重点在于保持文件和其他非结构化或半结构化信息的完整性,并使这些信息能够被访问 2. 业务驱…

(Windows11)如何自编译Aseprite(像素画软件) - 1.3.12版本

如何自编译Aseprite(像素画软件)-windows-以1.3.12版本为例 1. Aseprite说明开源像素画软件,自带调色板 Steam也可购买:steam购买2. 官方编译说明(Windows系统下) 官方库提供了win、mac以及Linux编译方式 文档地址:https://github.com/aseprite/aseprite/blob/main/INSTAL…

BUAA_OO_Unit1总结

Unit1 总结 1. 程序结构分析 1.1 代码结构(类图)1.2 类的度量统计类名 属性个数 方法个数 方法名 方法规模(代码行) 控制分支数目 类总代码规模(行)Function 4 6 Function 5 0 85sort 10 1 (双重循环)getCan 20 3 (条件+循环嵌套)huanCan 15 2 (条件替换逻辑)prework 15 …

永久免费!支持视频号下载,2025最新版本

在昨天的推文中给大家分享了一款非常不错的 Ai 工具,含有 Ai 一键抠图、Ai 无损放大等功能,对于设计和作图的小伙伴来说,非常的有帮助这款Ai 合集工具,内容丰富,且使用简单,纯在线使用,不消耗本地电脑硬件内存,有需要的小伙伴可以点击下方链接体验 一键Ai抠图、无损放大…

AbstractAutoProxyCreator#postProcessBeforeInstantiation

一、定义 postProcessBeforeInstantiation 是 Spring AOP 动态代理的核心扩展点,通过提前创建代理对象优化性能,并支持丰富的自定义逻辑(如事务、安全) 二、代码分析 public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws Be…