You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量调整200张图片至500x374并压缩保存至指定文件夹

批量调整图片尺寸并压缩保存的VB.NET解决方案

嘿,我来帮你搞定这个批量处理图片的需求!其实咱们可以优化一下你现有的代码——没必要把图片加载到PictureBox里,直接用System.Drawing.Image类处理会更高效。下面是完整的实现代码,包含尺寸调整、质量压缩和批量保存的功能:

Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO

Module ImageProcessor
    Sub Main()
        ' 源文件夹路径
        Dim sourceDir As New DirectoryInfo("C:\Users\Charbel\Desktop\Images")
        ' 目标文件夹路径(如果不存在则自动创建)
        Dim targetDir As String = "C:\Users\Charbel\Desktop\Resized_Compressed_Images"
        If Not Directory.Exists(targetDir) Then
            Directory.CreateDirectory(targetDir)
        End If

        ' 获取所有JPG格式的图片文件
        Dim imageFiles = sourceDir.GetFiles("*.jpg", SearchOption.AllDirectories).ToList()

        ' 设定目标尺寸
        Dim targetSize As New Size(500, 374)

        For Each imgFile In imageFiles
            ' 使用Using语句确保资源自动释放,避免内存泄漏
            Using originalImage As Image = Image.FromFile(imgFile.FullName)
                ' 创建对应目标尺寸的空位图
                Using resizedImage As Bitmap = New Bitmap(targetSize.Width, targetSize.Height)
                    Using graphics As Graphics = Graphics.FromImage(resizedImage)
                        ' 设置高质量插值模式,让调整后的图片更清晰
                        graphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
                        ' 将原始图片绘制到目标尺寸的画布上
                        graphics.DrawImage(originalImage, 0, 0, targetSize.Width, targetSize.Height)
                    End Using

                    ' 配置JPEG压缩参数:质量值0-100,值越小压缩率越高、画质越低
                    Dim encoderParams As New EncoderParameters(1)
                    encoderParams.Param(0) = New EncoderParameter(Encoder.Quality, 80L) ' 这里设为80,可按需调整

                    ' 获取JPEG格式的编码器
                    Dim jpegCodec As ImageCodecInfo = GetEncoderInfo("image/jpeg")

                    ' 组合目标文件的保存路径
                    Dim targetFilePath As String = Path.Combine(targetDir, imgFile.Name)

                    ' 保存调整尺寸并压缩后的图片
                    resizedImage.Save(targetFilePath, jpegCodec, encoderParams)
                End Using
            End Using
        Next

        Console.WriteLine("所有图片处理完成啦!")
    End Sub

    ' 辅助函数:根据MIME类型获取对应的图片编码器
    Private Function GetEncoderInfo(mimeType As String) As ImageCodecInfo
        Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
        For Each codec As ImageCodecInfo In codecs
            If codec.MimeType = mimeType Then
                Return codec
            End If
        Next
        Throw New Exception($"找不到{mimeType}格式的图片编码器")
    End Function
End Module

关键细节说明:

  • 自动创建目标文件夹:先检查目标路径是否存在,不存在则自动生成,避免保存时抛出路径不存在的错误。
  • 高质量尺寸调整:用HighQualityBicubic插值模式绘制图片,能最大程度保留原始画质,避免拉伸后模糊。如果需要保持图片比例而非强制适配500x374,可以额外计算缩放比例(比如根据原始图的宽高比,计算合适的宽/高再绘制)。
  • 灵活的压缩控制:通过EncoderParameter设置JPEG质量,你可以在画质和文件大小之间找平衡(比如70-80是比较通用的选择)。
  • 资源安全管理:所有实现IDisposable的对象都用Using包裹,确保处理完图片后自动释放内存,避免长时间运行导致内存泄漏。

如果你坚持要基于原来的PictureBox列表处理,只需要把遍历imageFiles改成遍历你的pictures列表,取出每个PictureBox.Image进行后续处理就行,逻辑和上面一致。

内容的提问来源于stack exchange,提问作者charbel el hachem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:30