windows - 将 Unix ImageMagick 脚本转换为 Windows 批处理文件

标签 windows unix command-line batch-file imagemagick

我有以下 bash 脚本 (.sh),它在 Unix 中运行得很好。我想转换为批处理 (.bat) 文件以便与 Windows 版 ImageMagick 一起使用,但转换时遇到了一些问题。

Unix 脚本的原始 GIT 存储库:

https://github.com/AndreyChernyh/imagemagick-filters

适用于 Windows 的 ImageMagick 版本:

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

这是我到目前为止所拥有的,但它没有按预期工作,因为我不确定相当于多个命令行参数的批处理文件是什么:例如“\”或“|”或者是否有可能。我在某处读到,等效项是插入符号“^”,但同样,我不能 100% 确定如何正确实现它。

@echo off

set SOURCE=%1

del result.jpg
del source_copy.jpg
del mask.png

convert.exe %SOURCE% -fill rgba(251,243,213,1.0\) -colorize 100% fill.jpg
convert.exe assets\earlybird\mask.png -resize 1024x768 mask.png

copy %SOURCE% source_copy.jpg

convert.exe fill.jpg %SOURCE% -compose multiply -gravity center -composite - ^
convert.exe - -modulate 101,68,100 - ^
convert.exe - -gamma 1.19 - ^
convert.exe - -channel red +level 10.5%,100% - ^
convert.exe - -modulate 105,120 - ^
convert.exe - -modulate 100,83,100 - ^
convert.exe - -level 0%,92%,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,243,213,1.0) -colorize 100%% fill.jpg
conv assets\earlybird\mask.png -resize 604x453 mask.png

copy %SOURCE% source_copy.jpg

conv fill.jpg %SOURCE% -compose multiply -gravity center -composite - |^
conv - -modulate 101,68,100 - |^
conv - -gamma 1.19 - |^
conv - -channel red +level 10.5%%,100%% - |^
conv - -modulate 105,120 - |^
conv - -modulate 100,83,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

最佳答案

你已经很接近了。我看到的大问题是您在 rgba(...) 中有一个额外的 \ ,您需要转义您的 % 符号(例如%%),并且需要在行继续符之前放置 |(如 |^)。试试这个:

@echo off

set SOURCE=%1

del result.jpg source_copy.jpg mask.png

convert.exe %SOURCE% -fill rgba(251,243,213,1.0) -colorize 100%% fill.jpg
convert.exe assets\earlybird\mask.png -resize 1024x768 mask.png

copy %SOURCE% source_copy.jpg

convert.exe fill.jpg %SOURCE% -compose multiply -gravity center -composite - |^
convert.exe - -modulate 101,68,100 - |^
convert.exe - -gamma 1.19 - ^
convert.exe - -channel red +level 10.5%%,100%% - |^
convert.exe - -modulate 105,120 - |^
convert.exe - -modulate 100,83,100 - |^
convert.exe - -level 0%%,92%%,0.92 - |^
convert.exe mask.png - -compose ColorBurn -composite - |^
convert.exe mask.png - -compose Multiply -composite result.jpg

del source_copy.jpg fill.jpg

关于windows - 将 Unix ImageMagick 脚本转换为 Windows 批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366682/

相关文章:

unix - sed 丢失了该行的右侧部分

file - 从命令行将文本写入 Hadoop

windows - 为什么 Git Bash 不能运行我的可执行文件?

c++ - 无法在 CMake 中创建动态库并将其链接到另一个动态库?

c++ - 在类 Unix 系统上获得以秒或毫秒为单位的正常运行时间

command-line - git中删除上一个分支的快捷方式

java - 在命令行上运行 Java 类时获取 "Javac is not recognised as internal or external command, operable program or patch file"

xml - 使用 Windows 命令将非 xml 文件从一个目录复制到另一个目录

windows - 如何将Linux Makefile转换为Windows Makefile

c - VirtualQueryEx 的 dwLength 参数的用途是什么?