gpt4 book ai didi

c# - Image.Save 参数无效

转载 作者:行者123 更新时间:2023-11-30 15:20:55 28 4
gpt4 key购买 nike

我想用另一个图像为文件夹中的文件加水印。但是,我收到错误

'Parameter Not Valid'

调用代码时

img.Save(filepath, System.Drawing.Imaging.ImageFormat.Jpeg);

我有以下代码;

    public static string WatermarkImagesInFolder(string url)
{
if (url == null)
throw new Exception("URL must be provided");

string path = HttpContext.Current.Server.MapPath(url);

if (!Directory.Exists(path))
throw new DirectoryNotFoundException();

Directory.CreateDirectory(String.Format(@"{0}\watermarked", path));

List<string> urls = GetJpgFilesFromFolder(path);

foreach (string imageUrl in urls)
{
Image img = WatermarkImage(imageUrl);

string filename = Path.GetFileName(imageUrl);
string filepath = String.Format(@"{0}\watermarked\{1}", path, filename);
img.Save(filepath, System.Drawing.Imaging.ImageFormat.Jpeg);
}

return "complete";
}

    public static Image WatermarkImage(string filename)
{
using (Image image = Image.FromFile(filename))
using (Image watermarkImage = Image.FromFile(HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["WatermarkImageUrl"])))
using (Graphics imageGraphics = Graphics.FromImage(image))
using (TextureBrush watermarkBrush = new TextureBrush(watermarkImage))
{
int x = (image.Width / 2 - watermarkImage.Width / 2);
int y = (image.Height / 2 - watermarkImage.Height / 2);
watermarkBrush.TranslateTransform(x, y);
imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width + 1, watermarkImage.Height)));
return image;
}
}

作为 img.save 的输入示例;

img.save("C:\\IMAGES\\wateremarked\\IMAGE (1).jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

请问这里有什么可能导致错误的想法吗?

最佳答案

在您的 WatermarkImage 中,图像对象位于 using 语句中。一旦超出范围,就会对图像调用 Dispose。您需要返回图像的副本 - 或者不使用 using 声明并确保您稍后妥善处理。

参见:Exception: Parameter is not valid (on passing new image to pictureBox)

public static string WatermarkImagesInFolder(string url)
{
if (url == null)
throw new Exception("URL must be provided");

string path = HttpContext.Current.Server.MapPath(url);

if (!Directory.Exists(path))
throw new DirectoryNotFoundException();

Directory.CreateDirectory(String.Format(@"{0}\watermarked", path));

List<string> urls = GetJpgFilesFromFolder(path);

foreach (string imageUrl in urls)
{
using(Image img = WatermarkImage(imageUrl))
{
string filename = Path.GetFileName(imageUrl);
string filepath = String.Format(@"{0}\watermarked\{1}", path, filename);
img.Save(filepath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}

return "complete";
}

public static Image WatermarkImage(string filename)
{
Image image = Image.FromFile(filename);
using (Image watermarkImage = Image.FromFile(HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["WatermarkImageUrl"])))
using (Graphics imageGraphics = Graphics.FromImage(image))
using (TextureBrush watermarkBrush = new TextureBrush(watermarkImage))
{
int x = (image.Width / 2 - watermarkImage.Width / 2);
int y = (image.Height / 2 - watermarkImage.Height / 2);
watermarkBrush.TranslateTransform(x, y);
imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width + 1, watermarkImage.Height)));
return image;
}
}

关于c# - Image.Save 参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38892863/

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