LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

利用asp.net获取指定目录下的所有图片,并压缩到指定大小

admin
2025年1月1日 17:51 本文热度 149

以下是在 ASP.NET(aspx)中获取指定目录下的所有图片并压缩到指定大小的示例代码:

一、使用 System.Drawing 和 System.IO 命名空间实现

1. 在页面的后台代码中添加以下方法:

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

public void CompressImagesInDirectory(string sourceDirectory, string destinationDirectory, int maxWidth, int maxHeight)
{
    if (!Directory.Exists(destinationDirectory))
    {
        Directory.CreateDirectory(destinationDirectory);
    }

    string[] imageFiles = Directory.GetFiles(sourceDirectory, "*.jpg");
    string[] pngImageFiles = Directory.GetFiles(sourceDirectory, "*.png");
    string[] allImageFiles = imageFiles.Concat(pngImageFiles).ToArray();

    foreach (string imagePath in allImageFiles)
    {
        using (Image image = Image.FromFile(imagePath))
        {
            int newWidth = image.Width;
            int newHeight = image.Height;

            if (image.Width > maxWidth || image.Height > maxHeight)
            {
                double ratioX = (double)maxWidth / image.Width;
                double ratioY = (double)maxHeight / image.Height;
                double ratio = Math.Min(ratioX, ratioY);

                newWidth = (int)(image.Width * ratio);
                newHeight = (int)(image.Height * ratio);
            }

            using (Bitmap resizedImage = new Bitmap(newWidth, newHeight))
            {
                using (Graphics graphics = Graphics.FromImage(resizedImage))
                {
                    graphics.DrawImage(image, 0, 0, newWidth, newHeight);
                }

                string fileName = Path.GetFileName(imagePath);
                string destinationPath = Path.Combine(destinationDirectory, fileName);

                ImageFormat format = GetImageFormat(imagePath);
                resizedImage.Save(destinationPath, format);
            }
        }
    }
}

private ImageFormat GetImageFormat(string imagePath)
{
    string extension = Path.GetExtension(imagePath).ToLower();
    if (extension == ".jpg" || extension == ".jpeg")
    {
        return ImageFormat.Jpeg;
    }
    else if (extension == ".png")
    {
        return ImageFormat.Png;
    }
    else
    {
        return ImageFormat.Jpeg;
    }
}

2. 然后在按钮的点击事件或其他触发事件中调用这个方法:

protected void CompressButton_Click(object sender, EventArgs e)
{
    string sourceDirectory = @"C:\YourSourceDirectory"; // 指定源目录
    string destinationDirectory = @"C:\YourDestinationDirectory"; // 指定目标目录
    int maxWidth = 800; // 设置最大宽度
    int maxHeight = 600; // 设置最大高度
    CompressImagesInDirectory(sourceDirectory, destinationDirectory, maxWidth, maxHeight);
}

请确保将源目录和目标目录替换为实际的路径,并根据需要调整最大宽度和高度。这个方法将遍历指定目录中的所有 JPEG 和 PNG 图像文件,将它们压缩到指定的最大尺寸,并保存到目标目录中。

以下是在上述代码中添加设置压缩质量参数的方法:

  1. 修改 CompressImagesInDirectory 方法如下:

public void CompressImagesInDirectory(string sourceDirectory, string destinationDirectory, int maxWidth, int maxHeight, int jpegQuality)
{
    if (!Directory.Exists(destinationDirectory))
    {
        Directory.CreateDirectory(destinationDirectory);
    }

    string[] imageFiles = Directory.GetFiles(sourceDirectory, "*.jpg");
    string[] pngImageFiles = Directory.GetFiles(sourceDirectory, "*.png");
    string[] allImageFiles = imageFiles.Concat(pngImageFiles).ToArray();

    foreach (string imagePath in allImageFiles)
    {
        using (Image image = Image.FromFile(imagePath))
        {
            int newWidth = image.Width;
            int newHeight = image.Height;

            if (image.Width > maxWidth || image.Height > maxHeight)
            {
                double ratioX = (double)maxWidth / image.Width;
                double ratioY = (double)maxHeight / image.Height;
                double ratio = Math.Min(ratioX, ratioY);

                newWidth = (int)(image.Width * ratio);
                newHeight = (int)(image.Height * ratio);
            }

            using (Bitmap resizedImage = new Bitmap(newWidth, newHeight))
            {
                using (Graphics graphics = Graphics.FromImage(resizedImage))
                {
                    graphics.DrawImage(image, 0, 0, newWidth, newHeight);
                }

                string fileName = Path.GetFileName(imagePath);
                string destinationPath = Path.Combine(destinationDirectory, fileName);

                ImageFormat format = GetImageFormat(imagePath);

                if (format == ImageFormat.Jpeg)
                {
                    // 使用 JPEG 编码器并设置质量参数
                    EncoderParameters encoderParams = new EncoderParameters(1);
                    encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, jpegQuality);
                    resizedImage.Save(destinationPath, GetJpegCodecInfo(), encoderParams);
                }
                else
                {
                    resizedImage.Save(destinationPath, format);
                }
            }
        }
    }
}

private ImageCodecInfo GetJpegCodecInfo()
{
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.MimeType == "image/jpeg")
            return codec;
    }
    return null;
}

private ImageFormat GetImageFormat(string imagePath)
{
    string extension = Path.GetExtension(imagePath).ToLower();
    if (extension == ".jpg" || extension == ".jpeg")
    {
        return ImageFormat.Jpeg;
    }
    else if (extension == ".png")
    {
        return ImageFormat.Png;
    }
    else
    {
        return ImageFormat.Jpeg;
    }
}

2. 然后在调用该方法时传入压缩质量参数,例如:

protected void CompressButton_Click(object sender, EventArgs e)
{
    string sourceDirectory = @"C:\YourSourceDirectory";
    string destinationDirectory = @"C:\YourDestinationDirectory";
    int maxWidth = 800;
    int maxHeight = 600;
    int jpegQuality = 80; // 设置 JPEG 压缩质量为 80,可以根据需要调整
    CompressImagesInDirectory(sourceDirectory, destinationDirectory, maxWidth, maxHeight, jpegQuality);
}

这样就可以在压缩图像时设置 JPEG 图像的压缩质量参数了。对于 PNG 图像,目前没有直接设置压缩质量的方法,因为 PNG 是无损压缩格式。


该文章在 2025/1/2 9:54:31 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved