Image Resizer 模块是一个 PowerToys 工具,它通过 Windows 文件资源管理器实现批量图像调整大小。它提供了一个用户友好的界面,可以同时调整多个图像的大小,并提供不同的尺寸、格式和质量设置选项。本文档详细介绍了 Image Resizer 模块的技术架构和组件。
Image Resizer 在 UI 组件方面遵循 MVVM (Model-View-ViewModel) 架构模式,并有几个关键子系统处理图像调整大小过程的不同方面。
图:Image Resizer 模块架构
来源
Image Resizer 用户界面包含几个页面,引导用户完成图像调整大小的过程
The InputPage 是配置调整大小选项的主要界面。它是一个 UserControl,包含几个关键的用户交互 UI 元素。
图:输入页 XAML 结构
主要 UI 功能包括
ComboBox 包含预定义尺寸(小、中、大、手机、自定义)NumberBox 控件,具有自动格式化功能ResizeFit 枚举值的下拉菜单(填充、适应、拉伸)ResizeUnit 枚举值的下拉菜单(像素、百分比、英寸、厘米)ShrinkOnly、IgnoreOrientation、Replace、RemoveMetadata 的复选框InfoBar该页面通过 Button_KeyDown 事件处理程序对数字框中的 Enter 键进行了特殊处理,该处理会立即更新值,而不是等待焦点丢失。
来源
进度页在图像处理操作期间显示进度条,并估算剩余时间。如果在处理过程中发生任何错误,结果页将显示无法处理的文件列表以及错误消息。
来源
Image Resizer 使用几个关键数据结构来表示调整大小选项
图:数据模型和枚举
该模块定义了两个核心枚举,它们驱动调整大小功能
ResizeFit 枚举 - 控制图像的调整方式
Fill:调整大小以完全填充目标尺寸Fit:在保持纵横比的同时调整大小以适应目标尺寸Stretch:拉伸图像以精确匹配目标尺寸ResizeUnit 枚举 - 指定测量单位
Centimeter:公制厘米Inch:英制英寸Percent:原始尺寸的百分比Pixel:像素尺寸The InputViewModel 通过属性公开这些枚举
ResizeFitValues:返回所有 ResizeFit 枚举值用于 UI 绑定ResizeUnitValues:返回所有 ResizeUnit 枚举值用于 UI 绑定The TryingToResizeGifFiles 属性检查是否有任何选定的文件具有 .gif 扩展名,以显示相应的警告。
来源
Image Resizer UI 流程由 ViewModel 中实现的命令驱动
图:命令流程和 UI 导航
The InputViewModel 实现多个 ICommand 实例
| 命令 | 目的 | 实现 |
|---|---|---|
ResizeCommand | 启动调整大小操作 | 保存设置,创建 ProgressViewModel |
CancelCommand | 关闭应用程序 | 调用 _mainView.Close() |
OpenSettingsCommand | 打开 PowerToys 设置 | 使用 SettingsDeepLink.OpenSettings() |
EnterKeyPressedCommand | 处理 NumberBox 中的 Enter 键 | 立即更新 CustomSize 的宽度/高度 |
resize 过程通过以下方式与设置系统集成
Settings.Save()SettingsDeepLink.OpenSettings(SettingsWindow.ImageResizer, false)Settings 属性来源
Image Resizer 将其设置存储在位于以下位置的 JSON 文件中: %LocalAppData%\Microsoft\PowerToys\Image Resizer\settings.json
设置系统处理
图:设置管理
关键设置参数包括
| 设置 | 目的 | 默认值 |
|---|---|---|
| SelectedSizeIndex | 选定的尺寸预设的索引 | 0 |
| ShrinkOnly | 仅缩小图像,从不放大 | false |
| 替换 | 覆盖原始文件 | false |
| IgnoreOrientation | 忽略图像方向元数据 | true |
| RemoveMetadata | 移除非渲染元数据 | false |
| JpegQualityLevel | JPEG 压缩质量 | 90 |
| FileName | 输出文件名的模板 | "%1 (%2)" |
| 尺寸 | 预定义尺寸的集合 | 小、中、大、手机 |
| CustomSize | 用户定义的自定义尺寸 | 1024×640 像素 |
来源
Image Resizer 使用 WPF (Windows Presentation Foundation) 和 WPF-UI 库组件来实现现代 Windows 11 风格的主题和控件。
图示:UI 技术栈
应用程序在其 App.xaml 中配置其主题
ui:ThemesDictionary Theme="Dark" 支持深色主题ui:ControlsDictionary 用于 WPF-UI 控件UI 利用了 WPF-UI 组件
ui:FluentWindow - 现代窗口样式,集成标题栏ui:NumberBox - 带上下按钮的数字输入控件ui:SymbolIcon - 现代图标(AutoFitWidth20, AutoFitHeight20 等)ui:InfoBar - 警告消息(例如,GIF 处理警告)ui:Button - 带外观选项的样式按钮所有面向用户的文本均通过资源系统进行本地化
Resources.resx 包含所有可本地化字符串Resources.Designer.cs 提供强类型访问{x:Static p:Resources.ResourceName} 绑定语法来源
Image Resizer 通过多种机制提供强大的错误处理和用户反馈
图示:错误处理流程
当选择 GIF 文件时,输入页面会显示警告
TryingToResizeGifFiles 属性检查 .gif 文件扩展名InfoBar 显示消息Input_GifWarning:“带动画的 GIF 文件可能无法正确调整大小。”处理过程中出现错误时,结果页面会显示
ItemsControl 的 ScrollViewer关键的与错误相关的本地化字符串
Input_GifWarning:关于 GIF 文件限制的警告Results_MainInstruction:错误结果页面的标题Results_Close:关闭按钮文本Progress_Stop:处理过程中的停止按钮来源
Image Resizer 模块通过与 Windows 文件资源管理器直接集成,提供了一种强大而简便的方式来一次性调整多个图像的大小。其 MVVM 架构实现了 UI 和业务逻辑之间的清晰分离,而其灵活的设置系统允许用户配置调整过程以满足其特定需求。