LazowskiAnton · Extensions

ImageSmith

在代码提到图片的地方直接看到图片:将指针悬停在路径上,卡片会显示图片、像素尺寸和文件大小。SVG 会被绘制,.ico 中的每个尺寸都在,动画 GIF 会播放——同一张卡片还会取代解决方案资源管理器中的预览。

免费 · Visual Studio 2022 和 2026 · 14 种界面语言 · PNG、JPEG、GIF、BMP、TIFF、ICO、WebP、SVG

为什么选择 ImageSmith

图片路径前带有缩略图的 XAML 文件,以及 SVG 徽标的 ImageSmith 卡片

看到图片,而不只是名称

/Assets/Icons/save.svg 能说明的很少。ImageSmith 无需打开文件,就在路径所在的位置显示图片本身——适用于 XAML、Razor、CSS、C#、JSON、项目文件和 .resx。

支持 SVG 和 .ico

Visual Studio 对 SVG 什么都不显示,图标也只显示一个尺寸。ImageSmith 会绘制 SVG,列出 .ico 中的每个图像,并播放动画 GIF。

缺失的图片一目了然

指向不在项目中也不在磁盘上的图片的路径会显示波浪线,缺少 Windows 所需尺寸的应用程序图标会显示提示——赶在用户看到空白图像或模糊图标之前。

免费,没有附加条件

没有订阅、没有“Pro”版、不收集数据,也不会在“输出”窗口或启动时显示消息。我们唯一的请求是:在你用过一段时间之后,到 Marketplace 给个评分。支持 Visual Studio 2022 和 2026,x64 和 ARM64。

功能

代码中的卡片

将指针悬停在图片路径上,卡片会在编辑器的快速信息工具提示中打开。它按项目查找文件的方式显示磁盘上文件的内容:相对于文件所在文件夹或项目的相对路径、相对于项目 (或 wwwroot) 的根路径、来自该程序集项目的 pack URI。

部分显示内容
图片棋盘格上的图片 (可看到透明区域),小图片放大时保持像素清晰,大图片缩小以适应。角落的三个按钮可切换背景。
尺寸标签像素尺寸;当同一标记设置了 Width 或 Height 时,还显示代码中的显示大小:1600 × 1000 · 以 20% 显示。SVG 则为:SVG · 适应大小。
信息文件名、像素尺寸、文件大小、格式和 DPI (不为 96 时);SVG 则显示 viewBox、形状数量以及是否含有渐变或文本;解决方案中的路径。
操作打开 (在 Visual Studio 中)、在默认应用中打开、在解决方案资源管理器中显示、复制路径。

棋盘格、白色或深色

白色卡片上的白色徽标会消失不见。图片右上角的三个按钮可在棋盘格、白色和深色之间切换;所选背景保持到关闭 Visual Studio。卡片的初始背景是一个选项。

路径前的缩略图

文件存在的每个路径前都会有一个与行同高的小图片——就像色块一样。图标文件列表一眼就能看懂。关闭它们可让编辑器更清爽。

解决方案资源管理器

将指针悬停在解决方案资源管理器中的图片文件上:ImageSmith 卡片会在旁边打开,取代内置预览。SVG 会被绘制 (内置预览什么都不显示),.ico 显示所有尺寸 (内置预览只显示一个),图片的缩放变体排列在其下方。

指针位于 ChartPolar_x4.png 上的解决方案资源管理器,以及带有缩放变体 ×1、×2、×3 和 ×4 的 ImageSmith 卡片

只要指针在项目或卡片上,卡片就会保留,因此可以单击其中的链接——这里是打开、在默认应用中打开、复制路径和复制图片。离开、滚动、按键或在树中单击时关闭。

文件夹、代码文件以及 ImageSmith 不显示的内容保留内置工具提示。如果 Visual Studio 更新改变了解决方案资源管理器,导致找不到指针下的项,ImageSmith 不会干扰。

图标 (.ico)

.ico 文件包含多个图像,每个尺寸一个。.ico 的卡片会在棋盘格上并排显示所有图像 (大于 128 px 的尺寸以 128 显示),并用表格列出每个尺寸、颜色、以 BMP 还是 PNG 存储以及字节数。

contoso.ico 的 ImageSmith 卡片:从 16 到 256 的六个尺寸,以及包含颜色、格式和字节数的表格

单击某个尺寸 (在图像条或表格中) 即可选中。复制所选尺寸 会将该图像放到剪贴板上。

行中的 另存为 PNG 将该尺寸写入 PNG 文件;将所有尺寸另存为 PNG… 会询问文件夹,并为每个尺寸写入一个 PNG (contoso-16.png … contoso-256.png)。

SVG

SVG 文件使用 SharpVectors 绘制——在代码中的卡片、解决方案资源管理器和缩略图中都是如此。卡片在图片下方以 16、24、32 和 48 px 显示它:看看它在工具栏按钮上的效果。

信息包括 viewBox (没有 viewBox 时为宽 × 高)、文件大小和形状数量,文件含有时还会显示 渐变 和 文本。无法绘制的 SVG 会显示错误所在行,而不是图片。

绝不加载 SVG 引用的外部文件和 URL。

动画 GIF

动画 GIF 在卡片中循环播放,信息中会显示帧数和时长:GIF · 动画,8 帧,0.8 秒。只有一帧的 GIF 保持静止。WebP、TIFF 和 BMP 的显示方式与 PNG 和 JPEG 相同。

三张 ImageSmith 卡片:动画 GIF、WebP 图片和带渐变的 SVG

缩放变体

图片常常为高 DPI 屏幕提供多个缩放比例。当这些文件放在一起时,卡片会将它们排列在图片下方,每个按其缩放比例和像素尺寸成比例绘制 (×2 · 64);当前显示的那个带有轮廓。缺少的常用比例显示为虚线框。

命名方式示例缺失时的虚线框
倍数 (WinForms、报表设计器)Chart.png, Chart_x2.png, Chart_x1_25.png, Chart_x1.5.png×1, ×2
@2x (Web、iOS、React Native)Chart.png, Chart@2x.png×1, ×2
scale- (UWP、WinUI、MSIX)Logo.scale-100.png, Logo.scale-200.png100, 200
targetsize- (UWP、WinUI、MSIX)Square44x44Logo.targetsize-24.png16, 24, 32, 48
尺寸后缀icon-16.png, icon-32.png, tent-480.jpg, tent-768.jpg—

单击某个变体即可在同一张卡片中查看。这一行在代码中的卡片和解决方案资源管理器中都有。

可识别的内容

路径通过图片文件的扩展名识别,位置是各语言命名文件的地方:

位置示例
XAML (WPF、WinUI、MAUI、Avalonia)Source="/Assets/logo.png", pack://application:,,,/Contoso;component/Icons/save.svg, /Contoso.Icons;component/…, ms-appx:///Assets/hero.jpg, avares://Contoso.App/Assets/logo.png
Razor、Blazor 和 HTML<img src="~/images/tent.jpg">, srcset, <link rel="icon">, style="background: url(…)"
CSS、SCSS、LESSurl("../images/hero.webp"), url(…) without quotes, image-set(…)
C#"Assets/hero.jpg", @"Assets\splash.png", new Uri("pack://…"), Path.Combine("Assets", "logo.svg")
JSON"icon": "images/icon-192.png" (appsettings.json, manifest.json)
项目文件<ApplicationIcon>, <Resource Include="…">, <Content Include="…">, MAUI and appxmanifest images
.resx指向图片的 ResXFileRef,以及值为图片路径的普通字符串。
格式PNG, JPEG, GIF, BMP, TIFF, ICO, WebP, SVG

指向解决方案中其他项目的 pack URI (/Contoso.Icons;component/Icons/save.svg,带或不带版本) 会在该项目中查找。ms-appx:/// 还能找到 UWP 和 WinUI 的限定文件 (Logo.png 对应 Logo.scale-200.png);MAUI 的 logo.png 能找到 Resources/Images/logo.svg。

有意不显示:URL 和 data: URI、绑定和资源 ({Binding …}、{StaticResource …})、内插字符串和由变量拼成的路径、MSBuild 属性、通配符、pack://siteoforigin:,以及 C# 中仅有文件名的情况 ("logo.png" 可能是任何东西)。

提示

两种提示,与 SmithWorks 系列共享:每条文本都以 ImageSmith: 开头,其工具提示中有 不再显示此类提示,安装 LensSmith 时提示还会显示在行尾。

提示何时显示文本
找不到图片指向不在项目中也不在磁盘上的图片的路径 (波浪线)。不检查 URL、含变量的路径以及代码中仅有文件名的情况。ImageSmith: /Assets/banner-old.png is not in the project.
缺少常用尺寸的图标应用程序或托盘 .ico 缺少 16、32、48 或 256 px (灰色圆点):Windows 会缩放其他尺寸,看起来会模糊。不检查网站图标 (favicon)。ImageSmith: tray.ico has no 16 × 16 image — Windows will scale a larger one.

每种提示都可以在设置的 编辑器中的提示 下关闭,也可以直接在提示中关闭。

设置

工具 › 选项 › SmithWorks › ImageSmith。每个选项都有简短说明,介绍它的作用。

选项默认值
悬停时预览开
解决方案资源管理器中的卡片开
路径前的缩略图开
预览背景棋盘格
提示: 找不到图片开
提示: 缺少常用尺寸的图标开
请求在 Marketplace 上评分开

设置存储在 %LocalAppData%\ImageSmith 中。重置为默认值 会重新打开所有选项。

ImageSmith 选项页
选项页。

常见问题

我把指针悬停在路径上,什么也没打开。为什么?

ImageSmith 只为在磁盘上找到的文件显示卡片。请检查路径是否以图片扩展名结尾,且不是由变量、绑定或 URL 构成的 (这些从不显示)。如果文件缺失,路径上应该会显示 找不到图片 波浪线。C# 中仅有文件名的情况 ("logo.png") 会被有意跳过——在 C# 中只读取带文件夹的路径或 pack URI。

为什么 avares://OtherAssembly/… 没有任何显示?

avares:// 或 pack URI 指定的是程序集。如果该程序集是已打开解决方案中的项目,ImageSmith 会在该项目中查找。如果它来自 NuGet 包或引用的 DLL,图片已编译到其中,并不是磁盘上的文件——因此没有可显示的内容,ImageSmith 也不会报告其缺失。

我的 SVG 命名空间错误或缺失。还能绘制吗?

能。以 xmlns="http://w3.org" 保存或没有任何命名空间的文件很常见;ImageSmith 会在绘制前补上 SVG 命名空间,因此卡片能显示图片。浏览器仍可能拒绝这样的文件,所以最好修正它。

卡片显示无法绘制此 SVG。怎么办?

卡片会显示错误的第一行 (例如带有行号和列号的 XML 错误)。修正文件后再次将指针悬停在路径上——已更改的文件会被重新读取。

能保留解决方案资源管理器中的内置预览吗?

能——在设置中关闭 解决方案资源管理器中的卡片。代码中的卡片保持不变。

大图片会拖慢编辑器吗?

不会。图片在后台线程上解码,并且只解码到卡片所需的尺寸;缩略图以小尺寸解码。超过 256 MB 的文件 (SVG 超过 8 MB,ICO 超过 16 MB) 只显示信息,不显示图片。

ImageSmith 会向任何地方发送数据吗?

不会。它只在你的计算机上读取解决方案中的图片文件,别无其他——没有遥测,没有网络请求,SVG 也绝不会从互联网加载任何内容。

在哪里报告问题或建议新功能?

请在 GitHub 上的 Feedback 仓库中提交 issue——那里有用于报告错误、提出建议和反馈无法识别的路径的表单(如有私密名称,请先替换)。也可以使用 Marketplace 上的 Q&A 选项卡。

更新日志

1.1.0

1.0.0