【排查解决】System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误

简介: 【排查解决】System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误

前言:

  今天项目发布上线,发布到正式环境验证功能的时候忽然方向之前做的一个图片合成的功能报错了提示:System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误。也就是说应用的System.Drawing中的Bitmap的这个类中的属性出了问题,这到底是什么问题呢?首先我本地开发,测试环境都可以正常的,为什么已发布到正式环境就有问题了呢,到底是环境问题还是配置权限的问题呢?

代码如下:

/// <summary>
        /// 合成图片
        /// </summary>
        /// <param name="backgroundImage">背景图</param>
        /// <param name="qrCodeImg">二维码图片</param>
        /// <param name="savePhysicalPath">图片存放物理路径</param>
        /// <param name="xDeviation">绘制图像X轴偏差</param>
        /// <param name="yDeviation">绘制图像Y轴偏差</param>
        /// <param name="width">绘制图像宽</param>
        /// <param name="height">绘制图像高</param>
        /// <returns></returns>
        public string CompositePicture(Image backgroundImage, Image qrCodeImg, string savePhysicalPath, int xDeviation = 0, int yDeviation = 0, int width = 0, int height = 0)
        {
            Bitmap bitmap = new Bitmap(backgroundImage.Width, backgroundImage.Height);
            Graphics graphics = Graphics.FromImage(bitmap);//绘图
            graphics.Clear(Color.White);
            SolidBrush surush = new SolidBrush(Color.White);
            graphics.DrawImage(backgroundImage, 0, 0, backgroundImage.Width, backgroundImage.Height);
            graphics.DrawImage(qrCodeImg, xDeviation, yDeviation, width, height);
            GC.Collect();//垃圾清理
            string compositePictureUrl = savePhysicalPath + Guid.NewGuid().ToString() + ".jpg";
            //合成图片保存
            bitmap.Save(compositePictureUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
            return compositePictureUrl;
        }

解决方案:

1、首先我排除了一下线上服务器是否存在savePhysicalPath图片存放的物理路径(我发布合成的图片保存的物理物理为/Content/Image)查看确实存在,因为之前在程序中写过判断文件夹是否存在不存在创建文件夹的逻辑。

if (!Directory.Exists(savePhysicalPath))
{
    Directory.CreateDirectory(savePhysicalPath);
}

2、判断文件Image是否存在读写的权限(让服务器管理员查了下果然是没有权限的),把权限的读写权限开通后就一切正常了。

1336199-20210604155138713-1399387777.png

 

相关文章
|
Web App开发 编解码 前端开发
webgl canvas系列——快速加背景、抠图、加水印并下载图片
webgl canvas系列——快速加背景、抠图、加水印并下载图片
585 8
webgl canvas系列——快速加背景、抠图、加水印并下载图片
|
数据可视化
绘制热图时看不出颜色差异?四种方式转换处理使结果显而“易”见
绘制热图时看不出颜色差异?四种方式转换处理使结果显而“易”见
20876 2
System.IO.FileNotFoundException:“未能加载文件或程序集“loginDAL”或它的某一个依赖项。系统找不到指定的文件。”
System.IO.FileNotFoundException:“未能加载文件或程序集“loginDAL”或它的某一个依赖项。系统找不到指定的文件。”
|
C# 安全 Windows
C# 判断用户是否对路径拥有访问权限
如何获取当前系统用户对文件/文件夹的操作权限?  1.获取安全信息DirectorySecurity DirectorySecurity fileAcl = Directory.GetAccessControl(folder); 通过Directory.
2172 0
文件名: ?Ciwindows\system32 inetsrconfiglapplicationHost.config 错误:无法写入配置文件
文件名: ?Ciwindows\system32 inetsrconfiglapplicationHost.config 错误:无法写入配置文件
258 0
|
SQL 安全 JavaScript
如何在 JSONP 中传递参数?
【10月更文挑战第30天】无论使用哪种方式传递参数,都需要确保客户端和服务器端对参数的约定和处理保持一致,以便正确地传递和使用参数。同时,要注意对参数进行合法性验证和安全处理,以防止潜在的安全风险,如SQL注入、XSS攻击等。
233 61
|
11月前
|
数据采集 监控 数据可视化
《数据质量评估方法大揭秘:精准衡量数据价值的关键》
在数字化时代,数据质量评估是确保数据价值的关键。常见方法包括准确性(与权威数据比对、内部逻辑校验)、完整性(统计缺失值、可视化分析)、一致性(数据格式检查、关联数据验证)、时效性(时间戳分析、业务场景判断)和可靠性(来源审查、稳定性分析)。其他方法如抽样评估、元数据评估和第三方评估也广泛应用。实际应用中需综合多种方法,结合业务场景制定评估指标,以确保数据质量,支持科学决策。
1078 18
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
C# 数据安全/隐私保护 计算机视觉
C#开发者的新选择:使用ImageSharp进行图像处理
C#开发者的新选择:使用ImageSharp进行图像处理
1594 8
|
ARouter 关系型数据库 MySQL
Django项目同时连接多个不同的数据库(7)
【7月更文挑战第7天】在Django项目中配置连接多个数据库,你需要: 1. 在`settings.py`中配置多个数据库, 2. 在`settings.py`内设置数据库路由,指定每个应用使用的数据库,
443 2

热门文章

最新文章