我有以下bash脚本(.sh)在Unix中工作得很好。 我想转换成一个批处理(.bat)文件与ImageMagick for Windows一起使用,但我在转换有点麻烦。
Unix脚本的原始GIT仓库:
https://github.com/AndreyChernyh/imagemagick-filters
适用于Windows的ImageMagick版本:
PHP设置系统调用的脚本超时,set_time_limit不起作用
如何计算文件夹,其子文件夹和所有文件内的所有文件。 计数不应该包括文件夹计数
path,/ usr / bin /和/ usr / local / bin /
Plink通过Windowsbatch file处理特定的错误
http://www.imagemagick.org/download/binaries/ImageMagick-6.7.0-Q16-windows.zip
earlybird.sh :
#!/bin/bash SOURCE=$1 # Prepare rm -f result.jpg source_copy.jpg mask.png convert $SOURCE -fill rgba(251,243,213,1.0) -colorize 100% fill.jpg convert assets/earlybird/mask.png -resize `identify -format "%wx%h" $SOURCE`! mask.png cp $SOURCE source_copy.jpg # Run convert fill.jpg $SOURCE -compose multiply -gravity center -composite - | convert - -modulate 101,68,100 - | convert - -gamma 1.19 - | convert - -channel red +level 10.5%,100% - | convert - -modulate 105,120 - | convert - -modulate 100,83,100 - | convert - -level 0%,92%,0.92 - | convert mask.png - -compose ColorBurn -composite - | convert mask.png - -compose Multiply -composite result.jpg # Cleanup rm -f source_copy.jpg fill.jpg # Open open $SOURCE result.jpg
这是我到目前为止,但它没有按预期工作,因为我不知道多个命令行参数的batch file相当于什么:例如,“”或“|” 或者甚至是可能的。 我在某个地方看到相当于“^”字样,但是我不能100%确定如何正确实施。
@echo off set SOURCE=%1 del result.jpg del source_copy.jpg del mask.png convert.exe %sOURCE% -fill rgba(251,1.0) -colorize 100% fill.jpg convert.exe assetsearlybirdmask.png -resize 1024x768 mask.png copy %sOURCE% source_copy.jpg convert.exe fill.jpg %sOURCE% -compose multiply -gravity center -composite - ^ convert.exe - -modulate 101,100 - ^ convert.exe - -gamma 1.19 - ^ convert.exe - -channel red +level 10.5%,100% - ^ convert.exe - -modulate 105,120 - ^ convert.exe - -modulate 100,100 - ^ convert.exe - -level 0%,0.92 - ^ convert.exe mask.png - -compose ColorBurn -composite - ^ convert.exe mask.png - -compose Multiply -composite result.jpg del source_copy.jpg del fill.jpg
工作代码:
这是我应用@Gabe的答案后所做的。 没有错误,它的工作完美无瑕!
@echo off set SOURCE=%1 del result.jpg del source_copy.jpg del mask.png conv %sOURCE% -fill rgba(251,1.0) -colorize 100%% fill.jpg conv assetsearlybirdmask.png -resize 604x453 mask.png copy %sOURCE% source_copy.jpg conv fill.jpg %sOURCE% -compose multiply -gravity center -composite - |^ conv - -modulate 101,100 - |^ conv - -gamma 1.19 - |^ conv - -channel red +level 10.5%%,100%% - |^ conv - -modulate 105,120 - |^ conv - -modulate 100,100 - |^ conv - -level 0%%,92%%,0.92 - |^ conv mask.png - -compose ColorBurn -composite - |^ conv mask.png - -compose Multiply -composite result.jpg del source_copy.jpg del fill.jpg
如何使用RHS上的cygwin sed使用windows set命令
PowerShell 2.0命令行redirect
Lua os.execute空terminal
你很近 我看到的大问题是你在rgba(...)有一个额外的 ,你需要转义%符号(比如%% ),并且你需要把| 之前的行连续字符(如|^ )。 尝试这个:
@echo off set SOURCE=%1 del result.jpg source_copy.jpg mask.png convert.exe %sOURCE% -fill rgba(251,1.0) -colorize 100%% fill.jpg convert.exe assetsearlybirdmask.png -resize 1024x768 mask.png copy %sOURCE% source_copy.jpg convert.exe fill.jpg %sOURCE% -compose multiply -gravity center -composite - |^ convert.exe - -modulate 101,100 - |^ convert.exe - -gamma 1.19 - ^ convert.exe - -channel red +level 10.5%%,100%% - |^ convert.exe - -modulate 105,120 - |^ convert.exe - -modulate 100,100 - |^ convert.exe - -level 0%%,0.92 - |^ convert.exe mask.png - -compose ColorBurn -composite - |^ convert.exe mask.png - -compose Multiply -composite result.jpg del source_copy.jpg fill.jpg
原始的unix shell脚本从第一个转换命令cmd输出,并从一个调用传递到下一个stdout / stdin,如' – '字符所示。
这是一个unix程序的约定,“ – ”的参数意思是“不要寻找一个文件名来处理,只是从标准输入中读取”。
而且,在谈到惯例时,DOS程序使用“/ o”(选项)格式来控制程序。 尝试convert.exe /? 看看你是否得到一个使用情况味精或帮助否则尝试convert.exe --help帮助(和其他unix变种),所以你知道哪个是正确的选项语法使用。
更重要的是,请注意,在DOS下有一个名为convert.exe的std程序,所以请确保您的PATH设置为首先转到Windows DIR的ImageMagick。 你可以告诉你什么时候做convert.exe /? 你会得到你不认识的选择。
原始脚本使用管道角色将一个程序的标准输出传递给下一个程序的标准输入。 这是一个令人印象深刻的链
我的cmd shell的经验在这个时候真的很老,但是有一次,一个DOS管道只能容纳64K。 你可能会遇到这个问题。 如果这些是长时间运行的命令,则尝试运行单独的窗口并执行dir %TEMP以查看正在创建的管道文件。 有了这么多的管道,DOS可能会有命名冲突或其他问题。
所以,做最简单的情况下, convert .. | convert ... convert .. | convert ... (只做部分工作,看看管道是否工作),并从那里建立起来,再加1个| convert .. | convert ..当你走。 如果在一段时间后爆炸,那么你确切地知道它发生了什么。
(...)中的第一个命令是否工作?
逃逸字符应该工作正常,我看你已经把你的路径字符从转到 ,所以这是好的。
而且%对.bat文件有特殊的含义,可以打印变量名称,比如%f% ,所以只要使用了%就可以了。 对于像%f%这样的变量,我能找到的打破翻译的唯一方法就是引用%f% ,这会给你提供%f%的无用输出。
不完美,但也不是.bat编程。
我希望这有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。