批量调整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
相关产品推荐
相关产品推荐

