mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-03 09:46:54 +02:00
673cd5aba358465f1579e2efc5d94c7e7a1a8c99
10 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
673cd5aba3 |
Add standard CLI support for Image Resizer (#44287)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request Adds a dedicated command-line interface (CLI) executable for Image Resizer (PowerToys.ImageResizerCLI.exe) ## Command `PowerToys.ImageResizerCLI.exe [options] [files...]` ## Options (High Level) | Option (aliases) | Description | |-----------------|-------------| | `--help` | Show help | | `--show-config` | Print current effective configuration | | `--destination`, `-d` | Output directory (optional) | | `--width`, `-w` | Width | | `--height`, `-h` | Height | | `--unit`, `-u` | Unit (Pixel / Percent / Inch / Centimeter) | | `--fit`, `-f` | Fit mode (Fill / Fit / Stretch) | | `--size`, `-s` | Preset size index (supports `0` for Custom) | | `--shrink-only` | Only shrink (do not enlarge) | | `--replace` | Replace original | | `--ignore-orientation` | Ignore EXIF orientation | | `--remove-metadata` | Strip metadata | | `--quality`, `-q` | JPEG quality (1–100) | | `--keep-date-modified` | Preserve source last-write time | | `--file-name` | Output filename format | ## Example usage ``` # Show help PowerToys.ImageResizerCLI.exe --help # Show current config PowerToys.ImageResizerCLI.exe --show-config # Resize with explicit dimensions PowerToys.ImageResizerCLI.exe --width 800 --height 600 .\image.png # Use preset size 0 (Custom) and output to a folder PowerToys.ImageResizerCLI.exe --size 0 -d "C:\Output" .\photo.png # Preserve source LastWriteTime PowerToys.ImageResizerCLI.exe --width 800 --height 600 --keep-date-modified -d "C:\Output" .\image.png ```  <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [x] **Localization:** All end-user-facing strings can be localized - [x] **Dev docs:** Added/updated - [x] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed |
||
|
|
66e96bbe9d |
Super resolution with AI for image resizer (#42331)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request From WinAppSDK 1.8, microsoft announced a new feature AI Imaging. We can use this ability to enhance our image resizer tools to support scale up the image resolution by AI. Doc: https://learn.microsoft.com/en-us/windows/ai/apis/imaging#what-can-i-do-with-image-super-resolution Target: 1. Add a new config to control use AI or not. 2. Support model download in image resizer. 3. Auto detect if user's computer support AI feature, if not, do not show the AI related config. 4. Switch the control part if user enable/disable ai feature. Demo: Model not ready, user need to download the model: <img width="694" height="625" alt="image" src="https://github.com/user-attachments/assets/8079f047-71fa-4abf-b266-003f74cc5d3e" /> Model ready: <img width="543" height="589" alt="image" src="https://github.com/user-attachments/assets/952eafc6-0af6-4bea-88d0-0724532f4fac" /> User's computer doesn't support AI feature (x86 machine) <img width="685" height="531" alt="image" src="https://github.com/user-attachments/assets/522ba300-1505-46a2-a29b-3e8e71c49cdd" /> Note: **This feature only support for Arm Windows with the latest Windows version.** <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed --------- Co-authored-by: Yu Leng (from Dev Box) <yuleng@microsoft.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Niels Laute <niels.laute@live.nl> Co-authored-by: moooyo <lengyuchn@gmail.com> Co-authored-by: Leilei Zhang <leilzh@microsoft.com> |
||
|
|
0e922a4dcb |
[ImageResizer] Fix issue where settings could be changed during a batch resize (#42163)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request This fixes an issue where the Image Resizer settings were reloaded for every resize operation in a multi-file batch. This could result in inconsistent resize results if the Settings application or the user interacted with the settings and the properties were changed, even temporarily. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #42116, #35114 - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments Corrects an issue in `ResizeBatch.Execute()` where `Settings.Default` was used: ```csharp protected virtual void Execute(string file) => new ResizeOperation(file, DestinationDirectory, Settings.Default).Execute(); ``` Unfortunately, `Settings.Default` is poorly named, and is not a constant property. Instead it actually calls `Reload()`, which loads the settings JSON file and re-processes it fully: ```csharp [JsonIgnore] public static Settings Default { get { defaultInstance.Reload(); return defaultInstance; } } ``` If the settings are changed part-way through a resize batch operation (even scrolling through the presets will set `selectedIndex` and save it back to disk), the batch resize operation may switch to a different resize behaviour, giving inconsistent results. The chances of this occurring increase with the length of the batch operation. ### Solution The solution is to set the `Settings` outside of the main loop and use that for every resize operation, which is what this PR does. `Process` is altered to load the `Settings` at the start and pass that to `Execute` on each iteration of the batch loop: ```csharp public IEnumerable<ResizeError> Process(Action<int, double> reportProgress, CancellationToken cancellationToken) { double total = Files.Count; int completed = 0; var errors = new ConcurrentBag<ResizeError>(); var settings = Settings.Default; ... Execute(file, settings); ``` `Execute` is updated to accept a `Settings` object instead of using `Settings.Default`: ```csharp protected virtual void Execute(string file, Settings settings) => new ResizeOperation(file, DestinationDirectory, settings).Execute(); ``` ### Additional changes The batch-related unit tests failed after the above change. I updated the Mock `Execute` to reflect the use of the `Settings` parameter. Also, the `Settings` class was unfortunately bound to the WPF UI, and could not be instantiated during unit testing. I've refactored this so it can be instantiated with or without an `App.Current.Dispatcher`. Ther's a new `ReloadCore()` method which just contains the extracted property setting code. None of the unit tests currently use the settings themselves, but at least the capability is now there. I also removed the setting of the `MaxDegreeOfParallelism` option in the `Parallel.For()`. When left at its default, the runtime will use the appropriate number of threads, and the heuristic it uses may not necessarily equal the number of processor cores in the system. <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Ensured all existing unit tests passed. - Tested with multiple runs of resizing 200 image files while browsing and changing the settings. This was no longer able to alter the ongoing resize operations. - Checked that the settings could still be amended via the Settings app. --------- Co-authored-by: Gordon Lam (SH) <yeelam@microsoft.com> |
||
|
|
eadcf4b120 |
[Analyzers] Update .editorconfig with rules to relax IDE errors (#36095)
* [Analyzers] Remove duplicate pascal case style from .editorconfig * [Analyzers] Configured severity for individual IDE and CA rules showing as errors in VS Set severity for IDE0005, IDE0008, IDE0016, IDE0018, IDE0019, IDE0021, IDE0022, IDE0023, IDE0025, IDE0027, IDE0028, IDE0029, IDE0031, IDE0032, IDE0034, IDE0036, IDE0039, IDE0042, IDE0044, IDE0045, IDE0046, IDE0047, IDE0057, IDE0051, IDE0052, IDE0054, IDE0055, IDE0056, IDE0057, IDE0059, IDE0060, IDE0061, IDE0063, IDE0071, IDE0073, IDE0074, IDE0075, IDE0077, IDE0078, IDE0083, IDE0090, IDE0100, IDE0130, IDE160, IDE180, IDE0200, IDE0240, IDE0250, IDE0251, IDE0260, IDE0270, IDE0290, IDE0300, IDE0301, IDE0305, IDE1005, IDE1006, CA1859, CA2022, CA2263 * [Analyzers] Fix mismatched analyzer descriptions * [Analyzers] Fix misspelling * Update .editorconfig Made the following style rules `silent` instead of `suggestion`: - Use explicit type instead of 'var' - Use expression body for ... - Use block-scoped namespace * [Analyzers] Set IDE0290 to silent * [Analyzers] Remove IDE1006 configuration from .editorconfig in favor of making exclusions for the few entries * [Analyzers][Indexer] Add IDE1006 suppressions * [Analyzers][Peek] Add IDE1006 suppression * [Analyzers][MWB] Add IDE1006 suppression. * [Analyzers][Plugins] Add IDE1006 suppression * [Analyzers][ImageResizer] Suppress IDE0073 to retain original copyright * [Analyzers] Remove IDE0073 severity change in .editorconfig --------- Co-authored-by: Ani <115020168+drawbyperpetual@users.noreply.github.com> |
||
|
|
37f2154c86 |
[Analyzers] Resolve StyleCop issues: SA1516 and SA1616 (#34853)
* [Analyzers][AdvancedPaste] Apply fix for SA1516 * [Analyzers][EnvironmentVariables] Apply fix for SA1516 * [Analyzers][RegistryPreview] Apply fix for SA1516 * [Analyzers][Peek] Apply fix for SA1516 * [Analyzers][PreviewPane] Apply fix for SA1516 * [Analyzers][FancyZones] Apply fix for SA1516 * [Analyzers][PT Run][Plugins] Apply fix for SA1516 * [Analyzers][PT Run] Apply fix for SA1516 * [Analyzers][PT Run][Wox] Apply fix for SA1516 * [Analyzers][Common] Apply fix for SA1516 * [Analyzers][ImageResizer] Apply fix for SA1516 * [Analyzers][ColorPicker] Apply fix for SA1516 * [Analyzers][MouseUtils] Apply fix for SA1516 * [Analyzers][DSC Schema Generator] Apply fix for SA1516 * [Analyzers][FileLocksmith] Apply fix for SA1516 * [Analyzers][Hosts] Apply fix for SA1516 * [Analyzers][MeasureTool] Apply fix for SA1516 * [Analyzers][MouseWithoutBorders] Apply fix for SA1516 * [Analyzers][TextExtractor] Apply fix for SA1516 * [Analyzers][Workspaces] Apply fix for SA1516 * [Analyzers][Awake] Apply fix for SA1516 * [Analyzers][PowerAccent] Apply fix for SA1516 * [Analyzers][RegistryPreview] Apply fix for SA1516 * [Analyzers][Settings] Apply fix for SA1516 * [Analyzers][MouseWithoutBorders] Apply fix for SA1616 |
||
|
|
e637902892 |
[PowerRename][ImageResizer] Tier1 Win11 Context menu (#19000)
* Test win11 tier1 context menu
* Try to test signing
* Cleanup
* Cleanup project file
* Sign dll
Add PowerToys preffix
Add assets to installer
* expect.txt
* Switch to named pipes
Unregister package on uninstall
Remove unneeded files
Cleanup
* Bring back check if package registered but use per-user method
* Fix win11 check
* expect.txt
* Check if package already registered
* Revert "Check if package already registered"
FindPackages() method needs admin privileges.
This reverts commit
|
||
|
|
b33bc2ecd0 | [NetAnalyzers]CA1031 suppressions cleanup (#18706) | ||
|
|
0d4017fe1a |
Io abstraction (#7293)
Co-authored-by: p-storm <paul.de.man@gmail.com> |
||
|
|
c219fe0d1d |
[fxcop] image resizer ui (#6841)
* adjustments * Settings fixed * Getting resizing tests operational again * fixed default vs loading from settings * one small tewak |
||
|
|
d84cc370c9 |
Merge ImageResizer into master (#1469)
* Import Image Resizer for Windows * getting code analysis and stylecop hooked in * upgrading to 4.7.2 * adding copyright * getting stuff to work headers and trailing commas adding braces updated encoder * Revert "getting stuff to work" This reverts commit |