65.9K
CodeProject 正在变化。 阅读更多。
Home

图像批量缩放器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (60投票s)

2004年9月23日

2分钟阅读

viewsIcon

293117

downloadIcon

4698

快速调整图像大小的简单实用程序

引言

我度假回来了,带着用我的新数码相机拍摄的大量照片。 通常,我更喜欢使用最佳质量和分辨率来拍照,当然,这意味着要管理更大的文件。

通常,在高分辨率下,单个 JPG 格式的照片会占用超过 1 Mb 的空间,如果您想通过电子邮件将图片发送给您的朋友,或者将它们放在网站上,这并不是很方便。 您必须降低图片的质量,以较低的分辨率对它们进行重新采样。

我需要调整图片大小,即使世界上有许多可以执行此操作的图像处理软件,但我还是决定编写我的一小段代码,用 VB.NET 来完成它。

该实用程序的工作方式

我编写的实用程序非常简单:给定一个“输入”文件夹,它会在该文件夹中查找 JPG 图片,然后逐个获取它们,通过指定的因子减小它们的大小,并将它们保存在给定的“输出”文件夹中。

Image Batch Resizer user interface

在“正常模式”下,当您按下“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 类来实现(在我的上一篇文章中描述)。

© . All rights reserved.