ImageMagick 命令无法在 Powershell 窗口中运行,但可以在 cmd 窗口中运行

2023-12-10

该命令是给图片添加水印

magick nature.jpg -set option:watermarkWidth "%[fx:int(w*0.25)]" -alpha set -background none ( -fill "#FFFFFF80" -stroke "#FF000080" -strokeWidth 3 -undercolor "#FF000080" -size "%[watermarkWidth]x" label:"THIS IS WATERMARK" -gravity center -geometry +10+10 -rotate -30 ) -composite -quality 40 nature_wm.jpg

it can be run on Windows cmd window enter image description here

But it cannot be run in Powershell window(see the error screenshot) enter image description here

我也尝试添加\ before ( and )(这应该在 macOS 或 Linux 上执行)

magick nature.jpg -set option:watermarkWidth "%[fx:int(w*0.25)]" -alpha set -background none \( -fill "#FFFFFF80" -stroke "#FF000080" -strokeWidth 3 -undercolor "#FF000080" -size "%[watermarkWidth]x" label:"THIS IS WATERMARK" -gravity center -geometry +10+10 -rotate -30 \) -composite -quality 40 nature_wm.jpg

But it throws the same error enter image description here

错误翻译:-fill:-fill 无法被识别为 cmdlet、函数、脚本文件或可运行程序。请检查名称的拼写,如果包含路径,请确保路径正确,然后重试。

I'm sure that the magick directive is in the environment variable enter image description here

看来Powershell可以运行简单命令但不能运行复杂命令(以下命令可以运行,没有错误)

magick nature.jpg -fill yellow nature.png

enter image description here

谁知道如何解决这个问题?

实际上我需要使用 golang 来运行它cmd = exec.Command("cmd", "/k", cmdStr),但是如果“cmdStr”不能在Powershell中运行,它就不起作用,因为我用golang构建的可执行文件也需要在Powershell上运行(我不想在Powershell上运行)cmd窗口,因为与 Powershell 相比它太原始了)。


TL;DR

本文末尾给出了一种非常简单、独立于引用的跨平台编写 ImageMagick 脚本的方法...


关于引号和引用以及转义和转义 ImageMagick 命令bash、CMD32 和 Powershell

由于其纯粹的多功能性和力量,图像魔术师提供比大多数命令行程序更丰富的选项、开关和参数(列出了大约 300 个选项和开关)here)并且它使用字符和符号来让用户以非常自然的方式表达事物。因此,使用时需要一定程度的谨慎图像魔术师在它可以运行的许多环境中,即:

  • under bash或其他 Unix/Linux shell,例如zsh, ksh, tcsh,
  • 在 Windows CMD32 和 Windows BATCH 文件中,
  • under Powershell
  • 在 MinGW、MSYS、Cygwin 等工具下

例如,就其本身而言,不考虑外壳,图像魔术师了解以下内容:

  • #或哈希,又名井号,用于以自然的方式表达十六进制颜色,例如-fill #ff0000用于红色填充颜色。然而,bash将相同的字符解释为引入注释,所以在bash你通常会写-fill '#ff0000'

  • ()或括号。图像魔术师使用括号将处理应用于堆栈中的特定图像,也称为“搁置处理”。因此,此命令加载两个图像并调整两个图像的大小magick IMAGE1.PNG IMAGE2.PNG -resize 800x600 ...但如果你只想调整第二个的大小,你会这样做magick IMAGE1.PNG ( IMAGE2.PNG -resize 800x600 ) ...然而,bash对子流程使用括号,因此它会认为您想要运行一个名为的子流程IMAGE2.PNG除非你用转义括号magick IMAGE1.PNG \( IMAGE2.PNG -resize 800x600 \) ...。同样地,Powershell会反对括号,并且您必须在左括号和右括号之前加上反引号。 CMD32 根本不将括号视为特殊的,因此它们在该环境中不需要转义。

  • ()或括号。图像魔术师使用它们来引入十六进制或 hsl 颜色,例如-fill RGBA(255,0,0) or -fill hsl(50,60,70)。再次,bash会不喜欢这样,认为你想要一个子 shell,所以人们写-fill "rgb(255,0,0)"。我假设Powershell也不会喜欢。

  • %或百分比。图像魔术师通常使用它和类似的方法将图像大小调整为其原始大小的 50%-resize 50%。但是,如果您在 Windows BATCH 文件中使用百分号,则需要将它们加倍,否则它会认为您正在引用其命令行参数。

  • < and >,或小于和大于。图像魔术师 uses >意味着您只想将调整大小应用于大于特定尺寸的图像,例如-resize 800>这意味着您只想将大于 800 的图像缩小到 800,但不希望将 800 以下的图像放大。同样与<。然而,bash使用这些字符来重定向输入和输出,所以在bash你通常会写-resize '800>'同样在 CMD32 中,您需要转义两者< and >前面加上插入符号^。并在前面加上反引号Powershell.

  • !或感叹号,又名"bang". 图像魔术师用这个来表示“去做就对了!”。所以,举例来说,-resize 800x600表示您要调整大小,使宽度不超过 800,高度不超过 600,并且应尊重宽高比。然而,当你像这样添加刘海时-resize 800x600!即使图像严重扭曲,您也将获得精确的 800x600 像素。 shell 可以将感叹号解释为对其先前命令的历史记录进行一些操作,因此您经常会看到转义

  • [ and ],或方括号。图像魔术师使用它们来引用多页文档(例如 PDF 或 TIFF)中的页面或页面子集。例如,以下内容表示 PDF 的第一页和最后一页,magick DOCUMENT.PDF[0,-1] ...如果您不小心处理它,这可能会与用于交替的 shell 语法混淆

  • *或星号。图像魔术师将星号理解为通配符以扩展所有匹配文件的列表,例如*.tif表示当前目录中的所有 TIFF 文件。那是一样的bash,但这里有一些细微差别。如果你使用magick *.tif ...,您的 shell 将扩展 TIFF 列表bash这将取决于您的系统ARGMAX。但如果你这样做magick '*.TIF' ...它将在内部扩展图像魔术师且不受此类限制。


bash 和 Unix/Linux shell 的一般提示

  • 行继续符是反斜杠

  • 必须在左括号和右括号前使用反斜杠进行转义

  • 哈希值必须位于双引号或单引号字符串内

的例子bash command

magick IMAGE1.PNG \
   \( IMAGE2.PNG -resize 50% -fill '#ff0000' -colorize 100% \) \
  -composite -transparent 'hsl(40,50,60)' result.png

Windows CMD32 的一般提示

  • 插入符号^用作转义字符

  • CMD32 通常不喜欢任何单引号的使用。 一般来说,如果从bash的咒语图像魔术师,尝试用双引号替换单引号。例外情况是当已经在双引号内时,您可以使用单引号,例如-draw "text 100,100 'Works like magick'"

  • 插入符号用作行继续字符,以这种方式使用时后面不能跟任何空格

  • BATCH 中的百分号必须加倍

  • 括号不需要转义

Windows CMD32 BATCH 命令示例

magick IMAGE1.PNG ^
   ( IMAGE2.PNG -resize 50%% -fill "#ff0000" -colorize 100% ) ^
  -composite -transparent "hsl(40,50,60)" result.png

Powershell 的一般提示

  • 反引号用作转义字符,行继续字符
  • 左括号和右括号必须用前面的反引号转义

Powershell 命令示例

magick IMAGE1.PNG `
   `( IMAGE2.PNG -resize 50% -fill "#ff0000" -colorize 100% `) `
  -composite -transparent "hsl(40,50,60)" result.png

TL;DR

如果您想要跨平台或独立于平台的编写方式图像魔术师脚本,最简单的是将所有命令放在一个文件中,该文件的内容只能由图像魔术师它本身而不是依赖于你的 shell。所以,写一个像这样的脚本,它是纯粹的,没有引用,并将其另存为script.mgk:

-size 640x480 xc:#ffff00
( foreground.png -resize 50% )
-gravity center -composite -write result.png

然后用以下命令调用它:

magick -script script.mgk

而你的 shell,无论是什么,甚至看不到引号、百分号、井号、续行符或括号:

比较和对比bash你需要的地方:

magick -size 640x480 xc:'#ffff00'    \
   \( foreground.png -resize 50% \)  \
   -gravity centre -composite result.png

和窗户CMD32.EXE你需要的地方:

magick -size 640x480 xc:#ffff00     ^
   ( foreground.png -resize 50%% )  ^
   -gravity centre -composite result.png    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ImageMagick 命令无法在 Powershell 窗口中运行,但可以在 cmd 窗口中运行 的相关文章

  • JScript:如何运行外部命令并获取输出?

    我正在使用 cscript exe 运行 JScript 文件 在脚本中我需要调用外部console命令并获取输出 Tried var oShell WScript CreateObject WScript Shell var oExec
  • 为什么 DER ASN.1 大整数的解组在 Golang 中仅限于 SEQUENCE?

    我希望能够使用encoding asn1 包从 DER 文件中解组一个大整数 但它看起来只适用于整数序列 例如 这不起作用 这很奇怪 因为 Big Int 的编组效果很好 https play golang org p Wkj0jAA6bp
  • PowerShell 解锁/卸载导入的 CSV

    早晨 我想问题就在标题里 我有一个脚本 它通过导入 CSV 的文件夹结构运行 与每个脚本一起工作 然后在完成后尝试删除它们 遗憾的是 其中很多都锁定在 PowerShell 上 而我删除它们的唯一方法就是关闭 PS 有什么方法可以卸载csv
  • Powershell 中的反斜杠

    为什么 split 参数的字符串需要两个反斜杠 而 join 参数的字符串只需要一个反斜杠 反引号是 Powershell 中的转义字符 字符前面的反斜杠有什么作用 path C folder test unit1 testing resu
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 使用“for”循环迭代目录中的所有文件

    如何使用 a 迭代目录中的每个文件for loop 我如何判断某个条目是目录还是文件 这会递归地列出当前目录及其子目录中的所有文件 并且仅列出文件 for r i in do echo i 此外 如果您在批处理文件中运行该命令 则需要将 符
  • 拖放到 Powershell 脚本

    我以为我已经找到了这个问题的答案 但我玩得越多 我就越发现它是 Powershell 的设计缺陷 我想拖放 或使用发送到机制 将多个文件和 或文件夹作为数组传递到 Powershell 脚本 测试脚本 Test ps1 param stri
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 在 Imagemagick 中创建阴影效果

    此图像中使用的边框阴影效果博客文章 http www adobe com devnet html5 articles css3 regions html似乎嵌入在图像本身中 不是 css3 如何在 imagemagick 中创建它 Edit
  • 从 Powershell 更新计划任务脚本

    我正在尝试编写一个每天运行一次的 Powershell 脚本 它将执行的众多功能之一是确保脚本本身是最新的 我的问题是 由于我对脚本进行了版本控制 因此我需要更新从脚本中创建的计划任务 我在这里考虑了两种不同的方法 其中我也无法弄清楚 我最
  • Start-Job 输出去了哪里?

    W gt job start job Write Output hi there throw an error Wait Job W gt job select State Failed HasMoreData True StatusMes
  • Go 指针 - 通过指针将值附加到切片

    我有一个 struct ProductData 及其实例 p 它有一个切片属性 type ProductInfo struct TopAttributes map string interface 我想设置 TopAttributes 如下
  • 相当于 UNIX diff 和 patch 的本机 PowerShell

    我需要潜在地修补文件作为脚本的一部分 为了使脚本所做的事情更具可读性 我想以类似于 UNIX diff 和 patch 方法的方式来实现它 在标准 UNIX 系统上 diff 可以生成特殊格式的文本文件 表示两个文件之间的差异 这可以与要修
  • Golang:如何在HTTP客户端的TLS配置中指定证书

    我有一个证书文件 该位置是 usr abc my crt我想将该证书用于我的 tls 配置 以便我的 http 客户端在与其他服务器通信时使用该证书 我当前的代码如下 mTLSConfig tls Config CipherSuites u
  • 用于检查 URL 状态的 PowerShell 脚本

    与此问题类似 https stackoverflow com questions 18500832 script to check the status of a url我正在尝试监视一组网站链接是否已启动并运行或没有响应 我在 Inter
  • PowerShell Trim 字符串包含“< char >$”的错误?

    如果我使用Trim 包含字符串的方法 char repeated char 例如 BL LA 或 LA AB Trim 删除之后的重复字符 以及 例如 a BL LA b a Trim BL returns A not LA but a B
  • Imagemagick 转换调整大小然后裁剪

    我有超过 1000 张不同分辨率的图像 例如 1234x2122 4400x5212 等 我想将它们全部转换为固定的 100x100 尺寸 所以 首先 我需要调整图像大小并保持比例 并获得 100xA 或 Ax100 其中 A gt 100
  • Powershell DSC Pull 服务器引发内部错误 - Microsoft.Isam.Esent.Interop 未找到

    我已按照 Powershell org 中的说明进行操作DSC Book http powershell org wp ebooks 设置 http Pull 服务器 Windows 2012 服务器 以与 DSC 一起使用 我设置了 ht
  • pq:函数unnest(未知)不是唯一的

    以下代码工作正常 但我想将 array a b c d e 定义为变量 rows err db Query select colname from SELECT date unnest array a b c d e AS colname
  • 如何使用 PowerShell 2 的导出 csv 附加文件?

    filesremoved export csv Path E Code powershell logs filesremoved txt NoTypeInformation 我也尝试过 filesremoved export csv Pat

随机推荐

  • 如何重定向 cron 脚本的完整输出

    我每天 18 35 运行一个简单的 cronjob 05 18 job sh 2 gt 1 gt gt job log 所以 job sh 的输出应该写入 job log 中 在job sh中 有一些echo命令和一些python脚本被执行
  • 如何使用正则表达式验证 JTable 的第一列?

    我正在编写一个程序 我必须验证第一列是否是 IP 地址 到目前为止 我只弄清楚如何找到如何过滤行 但在将数据写入文件之前必须检查该列 有人可以帮助我吗 您可以使用InputVerifier验证表格单元格的输入 这样你就不必验证一切after
  • 重新协商速率限制

    有谁知道在哪里以及如何设置此限制 这是关于 SSL TLS 连接的 如果您使用 OpenSSL 并且希望在一定字节数后进行重新协商 您可以使用BIO set ssl renegotiate bytes 如果您希望它在经过一定时间间隔后发生
  • Kotlin 转换双精度?至双倍

    我使用 Mapbox 开发地图应用程序 我正在使用的方法使用 Point Double Double 需要获取类型不匹配 找到双倍 双倍 val lat locationComponent lastKnownLocation latitud
  • 如何动态创建选项卡

    这是 C 中的 我基本上需要从 textbox Text 制作 TabPages 例如 textBox1 Text test TabPage textBox1 Text new TabPage 这就是我想要做的 我知道这不会直接工作 但这应
  • 带复选框的自定义列表视图 - 滚动时检查状态互换

    我使用带有复选框的自定义列表视图 滚动列表视图时 选中状态会互换如何控制互换并将其设置为默认值 即我选择的选中项目 代码供你参考 public View getView int position View convertView ViewG
  • 将时区名称转换为时间 ID:s

    我发现 iOS 框架不理解正确的时区名称 例如 东部标准时间 如果您输入 NSLog EST NSTimeZone timeZoneWithName Eastern Standard Time 你得到 美国东部时间 空 相反 您必须使用时间
  • 即使 RS 未完全满,是否也可能发生 RESOURCE_STALLS.RS 事件?

    的描述RESOURCE STALLS RSIntel Broadwell 的硬件性能事件如下 此事件对由于缺少合格条目而导致的停顿周期进行计数 在保留站 RS 这可能是由于 RS 溢出造成的 或者 由于 RS 阵列写入端口分配而导致 RS
  • 如何为 ggboxplot() 添加紧凑的字母显示?

    我正在尝试在我创建的箱线图中添加紧凑的字母显示 是否有机会结合cldList 功能与ggboxplot 这是我的示例数据 library FSA library multcompView library rcompanion library
  • 如何在Windows(Phone)8.1的BackgroundTask中使用SQLite

    Setup 我跟着带有 SQLite 示例的通用应用程序 to add SQLite到我的项目 然后添加BackgroundTask我跟着快速入门 创建并注册后台任务示例 Problem SQLite 的目标是Windows Phone 8
  • 动态改变 CSS 内容属性

    我的一个朋友正在从一家公司租用一个网上商店 他能够从不同的模板中进行选择 并且能够覆盖预定义的 CSS 并添加 javascript 片段 他要求我帮助她进行一些更改 但有一些我无法处理的事情 添加到购物车 按钮 在下面的 CSS 中 有一
  • 是否可以创建一个完全独立的 Python 包?

    问题 Ansible 是一个 python 模块 可通过 pip 安装 它依赖于几个依赖项 还有 pip 模块 是否可以将所有这些依赖项和 Ansible 本身 汇总 到某种单一包中 无需 root 即可离线安装 最好不需要 pip 进行安
  • 如何可靠地获取 Outlook 2013 插件中联系人上下文菜单的对象?

    我正在向上下文菜单添加一个条目Contact在 Outlook 2013 中如下本文中的示例 这是 XML
  • 在 CMAKE 自定义命令中运行 objcopy 会导致 make 期间出错

    我正在尝试向一个小项目添加一个构建后命令 该命令将自动获取我的构建输出文件 ELF 并将其转换为 Intel HEX 格式 以便在微控制器上闪烁 然而 当我添加此命令时 构建失败 它使用 shell 运行的所有替换的 CMake 变量字符串
  • 适用于大型和可扩展应用程序的数据库表结构

    我是一名软件工程师 几个月前就开始学习 为了我的工作 我开发了一个大型可扩展的 Web 应用程序 另一家公司负责编程工作并制作其背后的数据库 我们定义了数据以及它们之间的关系 但没有给出他们应该使用的硬数据库结构 现在第一个 内部 东西是可
  • 将 git 存储库中的一组文件拆分到自己的存储库中,保留相关历史记录[重复]

    这个问题在这里已经有答案了 可能的重复 如何在保留子目录的同时拆分 git 存储库 有一次 我将我的代码添加到了现有的 git 存储库中 并从那时起就对其进行了很多承诺 而另一位开发人员则致力于存储库中的其他现有文件 现在我想将我的代码拆分
  • Rails 区域设置不工作

    我正在使用 Rails 4我已将默认区域设置设置为位于 config application rb 中is yml 位于 config locales 中在 Rails 控制台中我输入 I18n available locales gt e
  • Cloudkit可以修改公共数据库的数据吗

    我刚刚浏览了此链接中的云套件文档cloudkit但不清楚如何修改公共数据库的数据库记录 根据cloudkit框架中的描述 使用公共数据库 如图像中所指定 默认数据是世界可读的 所有者可写的 这意味着只有所有者才能修改他的数据 其他用户只能读
  • 在 Angular 2 中创建自定义表单控件

    我正在尝试为一个创建自定义表单控件组件
  • ImageMagick 命令无法在 Powershell 窗口中运行,但可以在 cmd 窗口中运行

    该命令是给图片添加水印 magick nature jpg set option watermarkWidth fx int w 0 25 alpha set background none fill FFFFFF80 stroke FF0