GDI+ 中发生一般错误.(仅当我在服务器上尝试时)

本文关键字:服务器 错误 GDI+ | 更新日期: 2023-09-27 17:56:49

您好,我在调整大小并将 img 上传到服务器时遇到问题。一切都很好,但是今天告诉我朋友,当他想将img添加到服务器时,他得到"GDI+中发生一般错误。但是在我的电脑中一切正常。那么 IIS 会有问题吗?(两天前他遇到了一些问题,所以管理员更改了服务器上的某些内容)。

Bitmap image = KTEditImage.ResizeImage(new Bitmap(file.PostedFile.InputStream), 360, 360);
image.Save(Server.MapPath("~") + "/Static/Img/Zbozi/" + urlName, ImageFormat.Jpeg);
image.Dispose();
Bitmap smallImage = KTEditImage.ResizeImage(new Bitmap(file.PostedFile.InputStream), 230, 230);                           
smallImage.Save(Server.MapPath("~") + "/Static/Img/Zbozi/Small/" + urlName, ImageFormat.Jpeg);
smallImage.Dispose();

调整大小方法是

public static Bitmap ResizeImage(Bitmap image, int maxWidth, int maxHeight)
{
    return new Bitmap(image, maxWidth, maxHeight);
}

GDI+ 中发生一般错误.(仅当我在服务器上尝试时)

向 ASPNET 帐户 (Windows XP) 或 NETWORK SERVICE 帐户 (Windows Server 2003/2008/Vista/7) 授予对目标目录的写入权限,

我遇到了与此类似的问题,我正在调整图像大小并用调整大小的版本替换原始图像。事实证明,GDI+异常是由于导致问题的映像是只读的并且无法覆盖。

我在以下代码中的目标是调整超过最大文件大小的图像大小。

for (int i = 0; i < LoadedImgs.Length; i++)
{
    info = new FileInfo(LoadedImgs[i].origImgFullPath);
    double sizeMB = Math.Round(((double)info.Length / 1048576.0), MidpointRounding.AwayFromZero);
    if (sizeMB > (double)numImgMaxSize.Value)
    {
        Bitmap bmpOrigImg = new Bitmap(LoadedImgs[i].origImgFullPath);
        Bitmap bmpResizeImg = null;
        bmpResizeImg = ImageUtilities.Resize(bmpOrigImg, sizeMB);
        #region Save the resized image over the original
        bmpOrigImg.Dispose();                        
        bmpResizeImg.Save(LoadedImgs[i].origImgFullPath);
        bmpResizeImg.Dispose();
        #endregion
     }
}

此外,我调整大小到特定文件大小的算法需要调整(不包括位压缩等),但以共享的名义:

Bitmap origBmp = new Bitmap(image.Width, image.Height);
double ratio = (double)image.Width / (double)image.Height;
double bitDepth = 32.0;//Output BMP default
double newHeight = Math.Sqrt((1024.0 * 1024.0 * 8.0) / (ratio * bitDepth));
int height = (int)Math.Round(newHeight, MidpointRounding.AwayFromZero);
int width = (int)Math.Round(newHeight * ratio);

文件保存到该路径可能是权限问题。您需要确保"/Static/Img/Zbozi"和"/Static/Img/Zbozi/Small"目录允许匿名用户保存文件。

此问题是由于 .Net 框架处理的图像资源造成的,请在代码后使用 GC.Collect();