循环浏览包含图像的文件夹,调整图像大小并放置在新文件夹中

本文关键字:图像 文件夹 调整 包含 浏览 循环 | 更新日期: 2023-09-27 18:29:39

我有下面的代码,它可以简单地获取特定的图像,并提供固定的大小,而不考虑原始大小。这就是欲望的行动。

问题是,我必须一次从源文件夹1中选择每个图像。

我需要循环浏览Source文件夹,调整每个图像的大小,然后将图像保存在目标文件夹中。我熟悉循环文件,但不一定是图像。

代码:

class Program
{
    public static Image ScaleImage(Image image, int maxWidth, int maxHeight)
    {
        var newImage = new Bitmap(maxWidth, maxHeight);
        using (Graphics graphics = Graphics.FromImage(newImage))
        {
            graphics.CompositingQuality =
           System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            graphics.InterpolationMode =
            System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode =
            System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            graphics.DrawImage(image, 0, 0, maxWidth, maxHeight);
        }
        return newImage;
    }
    static void Main(string[] args)
    {
        var image = Image.FromFile(@"C:'Source'original_image.jpg");
        var newImage = ScaleImage(image, 150, 150);
        newImage.Save(@"C:'Dest'resized_image.png", ImageFormat.Png);
    }
}

循环浏览包含图像的文件夹,调整图像大小并放置在新文件夹中

var files = new DirectoryInfo(@"C:'Source'")
            .GetFiles()
            .Where(f => f.IsImage());
foreach (var file in files)
{
      using (var image = Image.FromFile(file.FullName))
      {
            using (var newImage = ScaleImage(image, 150, 150))
            {
                try
                {
                    var newImageName = Path.Combine(@"C:'Dest'", Path.GetFileNameWithoutExtension(file.Name) + "_resized" + file.Extension);
                    newImage.Save(newImageName, ImageFormat.Jpeg);
                }
                catch
                {
                    continue;
                }
            }
        }
    }
}

public static class Extensions
{
    public static bool IsImage(this FileInfo file)
    {
        var allowedExtensions = new[] {".jpg", ".png", ".gif", ".jpeg"};
        return allowedExtensions.Contains(file.Extension.ToLower());
    }
}