如何在std::system中调用Windows cmd的convert命令及解决参数报错
问题根因
该报错的核心原因是system函数调用的convert不是你预期的ImageMagick图片处理工具:
- Windows系统自带了一个同名的
convert.exe工具,路径为C:\Windows\System32\convert.exe,作用是将FAT32文件系统转换为NTFS格式,完全不支持-quality参数,所以触发了参数无效报错 - 你直接在命令行执行命令正常,是因为当前用户的PATH环境变量中ImageMagick的安装路径排序在系统路径
C:\Windows\System32之前,优先找到了ImageMagick的convert工具;而Visual Studio 2019运行程序时默认继承系统级PATH配置,系统路径排序更靠前,因此匹配到了系统自带的同名工具
解决方案
你可以选择以下任意一种方案解决冲突:
指定ImageMagick convert的绝对路径调用
找到你本地ImageMagick安装目录下的convert.exe完整路径,调用时填写全路径即可,路径含空格的话需要额外加引号包裹,示例代码如下:system("\"C:\\Program Files\\ImageMagick-7.1.1-Q16\\convert.exe\" -quality 80 captureqwsx.bmp captureqwsx.jpg");注意将示例路径替换为你本地实际的ImageMagick安装路径。
重命名ImageMagick的convert工具
进入ImageMagick安装目录,将convert.exe重命名为不会和系统工具冲突的名称,比如im_convert.exe,之后调用时直接使用新名称即可:system("im_convert -quality 80 captureqwsx.bmp captureqwsx.jpg");这种方案不需要写死路径,适配性更强。
调整运行时PATH顺序(不推荐)
你可以在程序启动时手动修改环境变量PATH,将ImageMagick的安装路径插入到最前面,保证优先匹配到ImageMagick的工具,但该方案换环境运行时容易出现兼容性问题,不优先选择。
内容的提问来源于stack exchange,提问作者Ariel Lubovich
相关产品推荐
相关产品推荐

