gpt4 book ai didi

c# - 调用 System.Drawing.Image.Save 时出现无效参数错误

转载 作者:太空狗 更新时间:2023-10-30 00:54:37 29 4
gpt4 key购买 nike

我在调用 System.Drawing.Image.Save 函数时收到无效参数错误。我用谷歌搜索并找到了一些建议,但没有任何效果。我想做的是,当我上传图像时,如果它大于 100kb,我想将图像大小减半。请帮忙。

     System.Drawing.Image FullsizeImage = System.Drawing.Image.FromFile(realpath);


FullsizeImage = System.Drawing.Image.FromFile(realpath);
int fileSize = (int)new System.IO.FileInfo(realpath).Length;
while (fileSize > 100000) //If Larger than 100KB
{
SaveJpeg(realpath, FullsizeImage);
fileSize = (int)new System.IO.FileInfo(realpath).Length;
}



private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
// Get image codecs for all image formats
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

// Find the correct image codec
for (int i = 0; i < codecs.Length; i++)
if (codecs[i].MimeType == mimeType)
return codecs[i];
return null;
}

public static void SaveJpeg(string path, Image img)
{


Image NewImage = img;
img.Dispose();

EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, 85L);
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;

ImageCodecInfo jpegCodec = GetEncoderInfo(GetMimeType(path.Substring(path.LastIndexOf('.'), path.Length - path.LastIndexOf('.'))));
//THE ERROR IS HERE!!!!!!
NewImage.Save(path, jpegCodec, encoderParams);
//THE ERROR IS HERE!!!!!!

}




public static string GetMimeType(string extension)
{
if (extension == null)
{
throw new ArgumentNullException("extension");
}

if (!extension.StartsWith("."))
{
extension = "." + extension;
}

switch (extension.ToLower())
{
#region Big freaking list of mime types
// combination of values from Windows 7 Registry and
// from C:\Windows\System32\inetsrv\config\applicationHost.config
// some added, including .7z and .dat

case ".323": return "text/h323";

// more extension here..

#endregion

default:
// if you have logging, log: "No mime type is registered for extension: " + extension);
return "application/octet-stream";
}
}

编辑:我修改了如下代码,现在图像正在保存,没有任何异常!谢谢!但这里还有另一个问题。文件大小没有减少。这意味着我的 while 循环永远不会退出。请帮助并再次感谢。

using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(realpath)))
{
using (Image FullsizeImage = Image.FromStream(ms))
{
//code here
int fileSize = (int)new System.IO.FileInfo(realpath).Length;
while (fileSize > 100000) //If Larger than 100KB
{
SaveJpeg(realpath, FullsizeImage, 85L);
fileSize = (int)new System.IO.FileInfo(realpath).Length;
}

}
}

谁能帮帮我,我的问题还没有解决:(

最佳答案

因为您要处理一个 image 对象。

public static void SaveJpeg(string path, Image img)
{
Image NewImage = img;
img.Dispose(); <------- Here
...
}

编辑:方法 Image.FromFile 文件打开一个流,并且在您的方法未终止之前该文件不会关闭。尝试使用 MemoryStream。

using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(realPath)))
{
using (Image img = Image.FromStream(ms))
{
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;


myImageCodecInfo = GetEncoderInfo("image/jpeg");
myEncoder = Encoder.Quality;

myEncoderParameters = new EncoderParameters(1);

myEncoderParameter = new EncoderParameter(myEncoder, 85L);
myEncoderParameters.Param[0] = myEncoderParameter;
img.Save(realPath, myImageCodecInfo, myEncoderParameters);
}
}

关于c# - 调用 System.Drawing.Image.Save 时出现无效参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245800/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com