菜单

图片调整器

相关源文件

概述

Image Resizer 模块是一个 PowerToys 工具,它通过 Windows 文件资源管理器实现批量图像调整大小。它提供了一个用户友好的界面,可以同时调整多个图像的大小,并提供不同的尺寸、格式和质量设置选项。本文档详细介绍了 Image Resizer 模块的技术架构和组件。

架构

Image Resizer 在 UI 组件方面遵循 MVVM (Model-View-ViewModel) 架构模式,并有几个关键子系统处理图像调整大小过程的不同方面。

模块结构

图:Image Resizer 模块架构

来源

用户界面组件

Image Resizer 用户界面包含几个页面,引导用户完成图像调整大小的过程

  1. 输入页:允许选择调整大小选项和配置
  2. 进度页:在调整大小操作期间显示进度
  3. 结果页:显示调整大小期间发生的任何错误

输入页

The InputPage 是配置调整大小选项的主要界面。它是一个 UserControl,包含几个关键的用户交互 UI 元素。

图:输入页 XAML 结构

主要 UI 功能包括

  • 尺寸选择ComboBox 包含预定义尺寸(小、中、大、手机、自定义)
  • 自定义尺寸:用于宽度和高度的 NumberBox 控件,具有自动格式化功能
  • 调整大小选项:用于 ResizeFit 枚举值的下拉菜单(填充、适应、拉伸)
  • 单位选择:用于 ResizeUnit 枚举值的下拉菜单(像素、百分比、英寸、厘米)
  • 处理选项:用于 ShrinkOnlyIgnoreOrientationReplaceRemoveMetadata 的复选框
  • GIF 警告:当选择 GIF 文件时显示的 InfoBar
  • 操作:用于调整大小操作、设置和取消的按钮

该页面通过 Button_KeyDown 事件处理程序对数字框中的 Enter 键进行了特殊处理,该处理会立即更新值,而不是等待焦点丢失。

来源

进度页和结果页

进度页在图像处理操作期间显示进度条,并估算剩余时间。如果在处理过程中发生任何错误,结果页将显示无法处理的文件列表以及错误消息。

来源

数据模型

调整大小选项

Image Resizer 使用几个关键数据结构来表示调整大小选项

图:数据模型和枚举

核心枚举

该模块定义了两个核心枚举,它们驱动调整大小功能

ResizeFit 枚举 - 控制图像的调整方式

  • Fill:调整大小以完全填充目标尺寸
  • Fit:在保持纵横比的同时调整大小以适应目标尺寸
  • Stretch:拉伸图像以精确匹配目标尺寸

ResizeUnit 枚举 - 指定测量单位

  • Centimeter:公制厘米
  • Inch:英制英寸
  • Percent:原始尺寸的百分比
  • Pixel:像素尺寸

ViewModel 集成

The InputViewModel 通过属性公开这些枚举

  • ResizeFitValues:返回所有 ResizeFit 枚举值用于 UI 绑定
  • ResizeUnitValues:返回所有 ResizeUnit 枚举值用于 UI 绑定

The TryingToResizeGifFiles 属性检查是否有任何选定的文件具有 .gif 扩展名,以显示相应的警告。

来源

命令处理和 UI 流程

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)
  • 在整个 UI 中直接绑定到 Settings 属性

来源

设置管理

Image Resizer 将其设置存储在位于以下位置的 JSON 文件中: %LocalAppData%\Microsoft\PowerToys\Image Resizer\settings.json

设置系统处理

  • 保存用户偏好设置
  • 加载保存的设置
  • 管理调整大小预设
  • 不同图像格式的编码选项

图:设置管理

关键设置参数包括

设置目的默认值
SelectedSizeIndex选定的尺寸预设的索引0
ShrinkOnly仅缩小图像,从不放大false
替换覆盖原始文件false
IgnoreOrientation忽略图像方向元数据true
RemoveMetadata移除非渲染元数据false
JpegQualityLevelJPEG 压缩质量90
FileName输出文件名的模板"%1 (%2)"
尺寸预定义尺寸的集合小、中、大、手机
CustomSize用户定义的自定义尺寸1024×640 像素

来源

UI 技术和主题

Image Resizer 使用 WPF (Windows Presentation Foundation) 和 WPF-UI 库组件来实现现代 Windows 11 风格的主题和控件。

图示:UI 技术栈

主题配置

应用程序在其 App.xaml 中配置其主题

  • 使用 ui:ThemesDictionary Theme="Dark" 支持深色主题
  • 包含 ui:ControlsDictionary 用于 WPF-UI 控件
  • 将多个值转换器注册为应用程序资源

现代 UI 控件

UI 利用了 WPF-UI 组件

  • ui:FluentWindow - 现代窗口样式,集成标题栏
  • ui:NumberBox - 带上下按钮的数字输入控件
  • ui:SymbolIcon - 现代图标(AutoFitWidth20, AutoFitHeight20 等)
  • ui:InfoBar - 警告消息(例如,GIF 处理警告)
  • ui:Button - 带外观选项的样式按钮

本地化支持

所有面向用户的文本均通过资源系统进行本地化

  • Resources.resx 包含所有可本地化字符串
  • Resources.Designer.cs 提供强类型访问
  • 在 XAML 中使用 {x:Static p:Resources.ResourceName} 绑定语法

来源

错误处理和用户反馈

Image Resizer 通过多种机制提供强大的错误处理和用户反馈

图示:错误处理流程

GIF 文件警告

当选择 GIF 文件时,输入页面会显示警告

  • TryingToResizeGifFiles 属性检查 .gif 文件扩展名
  • 具有“警告”严重程度的 InfoBar 显示消息
  • 使用本地化资源 Input_GifWarning:“带动画的 GIF 文件可能无法正确调整大小。”

结果页面错误显示

处理过程中出现错误时,结果页面会显示

  • 包含绑定到错误集合的 ItemsControlScrollViewer
  • 每个错误都会显示文件名和错误消息
  • 本地化主说明:“无法调整以下图片的大小”

错误消息的资源字符串

关键的与错误相关的本地化字符串

  • Input_GifWarning:关于 GIF 文件限制的警告
  • Results_MainInstruction:错误结果页面的标题
  • Results_Close:关闭按钮文本
  • Progress_Stop:处理过程中的停止按钮

来源

结论

Image Resizer 模块通过与 Windows 文件资源管理器直接集成,提供了一种强大而简便的方式来一次性调整多个图像的大小。其 MVVM 架构实现了 UI 和业务逻辑之间的清晰分离,而其灵活的设置系统允许用户配置调整过程以满足其特定需求。