在 Windows 下,使用 Batch-Script 或 Powershell 和ImageMagick,我只想创建一个适当的图标文件,就像您可以使用ToyCon或QuickAnyToIco程序创建的图标一样,即:
- 图像层位于画布中央的图标
- 它自动适应垂直或水平边缘,即图像自动缩小或放大。
- 保持纵横比
- 具有透明背景
- 图标实际尺寸为 256x256px(图标内包含其他各种典型尺寸的任意图层:128x128、64x64、32x32、16x16 等)
这是一项简单的任务,任何用于 Windows 的传统图标转换器软件都可以完美完成。
现在,使用ImageMagick,icon:auto-resize
参数 it 没有任何帮助,因为它拉伸图像以适应宽度和高度。
我读过ImageMagick 的文档,它有这两个修饰符:
-resize
我注意到它们可以在和参数中指定的宽度和高度值中指定-extent
。
和这个:
……为了-extent
论证。
但我找不到正确使用或组合它们的方法,通过缩小和放大(保留纵横比)自动适应宽度或高度来使图像居中。我坚持认为,就像QuickAnyToIco程序一样。
这是一个示例命令,我尝试为图标创建 256x256 png 图层:
输入图像尺寸:513x458
命令是这样的:
Magick.exe convert "image.jpg" -resize "256>x256" -background white -gravity center -extent "256^x256^" -quality 100 "output.png"
结果输出图像是这样的:
输出正常!!,这与任何优秀的图标转换器软件产生的结果相同。
现在,使用相同的命令和图像大小为 208x242 的图像,我得到以下输出图像:
输出错误!!图像居中,但顶部和底部边缘不合适。
我期望得到这个结果图像(由任何好的图标转换器软件生成):
我可以使用这个命令来实现它:
Magick.exe convert "cover.jpg" -resize "256<x256" -background white -gravity center -extent "256^x256^" -quality 100 "output.png"
但它只适用于像这样的较小图像。同样的命令将生成另一个图像:
笔记:
白色背景只是一种方便的颜色,我选择它是为了更好地视觉呈现问题。
上面示例中使用的原始输入图像:
https://i.imgur.com/wiXntuD.jpg https://i.imgur.com/QaWV1Oe.jpg
使用 Windows 11 上的 ImageMagick v7,我使用此命令从几乎任何输入图像制作图标......
它以“-extent 1:1#”开头,将输入图像的画布扩展到 1:1 的比例。“#”标志告诉它根据需要添加画布以实现 1:1 的比例。
该命令继续处理该方形图像,并使用 IM 的图标大小定义,它将输出一个包含指定大小的图标。
我能想到的解决这个问题的唯一解决方案是一个脚本化解决方案来获取和评估输入图像的宽度和高度,然后决定是否在magick.exe
<
参数中使用“ ”或“ ”标志。>
因此,这是一个PowerShell脚本,它将递归搜索 bmp、jpeg/jpg、png 和 webp 文件,并将它们转换为 ico。它似乎按预期工作,将图像居中并缩小或放大以适应最近的画布边缘,同时保持纵横比。
上面代码中最重要且相关的部分是这个条件块:
更新:
@GeeMack使用 PowerShell 的解决方案: