图像批量缩放器






4.78/5 (60投票s)
2004年9月23日
2分钟阅读

293117

4698
快速调整图像大小的简单实用程序
引言
我度假回来了,带着用我的新数码相机拍摄的大量照片。 通常,我更喜欢使用最佳质量和分辨率来拍照,当然,这意味着要管理更大的文件。
通常,在高分辨率下,单个 JPG
格式的照片会占用超过 1 Mb 的空间,如果您想通过电子邮件将图片发送给您的朋友,或者将它们放在网站上,这并不是很方便。 您必须降低图片的质量,以较低的分辨率对它们进行重新采样。
我需要调整图片大小,即使世界上有许多可以执行此操作的图像处理软件,但我还是决定编写我的一小段代码,用 VB.NET 来完成它。
该实用程序的工作方式
我编写的实用程序非常简单:给定一个“输入”文件夹,它会在该文件夹中查找 JPG
图片,然后逐个获取它们,通过指定的因子减小它们的大小,并将它们保存在给定的“输出”文件夹中。
在“正常模式”下,当您按下“GO”按钮时,将扫描输入文件夹,预览框中会显示找到的每张图片,并且会询问您是否转换该特定图片。 在预览框下方,您可以找到图像的文件名和大小(磁盘大小、尺寸 X 和 Y、宽高比)。
如果您在按下“GO”按钮之前选中“批量处理”复选框,也可以在“批量模式”(即:无人干预,转换输入文件夹中找到的所有图片)下进行转换。 要在运行过程中停止批量处理,只需取消选中该选项即可恢复到“正常模式”。
关于代码
核心缩小功能位于 Reduce()
子例程中,特别是在这行代码中
img = New Bitmap(img, New Size(img.Size.Width * factor,
img.Size.Height * factor))
请注意,缩小因子同时应用于两个图片尺寸(以保持宽高比); 因此,如果原始图片的大小为 [x,y],并且缩小因子为 F,则生成的图像大小为 [x*F,y*F](因此其面积减少了 F*F)。
很容易修改此公式以获得不同的调整大小行为。 例如,如果原始图片的大小不一致,您可能希望按指定的尺寸(不考虑原始尺寸)而不是按固定因子来缩小它们。
Reduce()
子例程还包含一些代码行,用于计算生成的 JPG
图片的文件大小。 这种计算只需查看图像在 JPG
格式下保存到的 MemoryStream
的大小即可
Dim SizeKb As String
Dim ms As New MemoryStream()
img.Save(ms, Imaging.ImageFormat.Jpeg)
SizeKb = (ms.Length \ 1024).ToString() & "Kb "
在 Image Batch Resizer 实用程序中要注意的最后一件事是工作会话之间配置设置的持久性,这通过使用 ConfigOpt
类来实现(在我的上一篇文章中描述)。