提问人:snipers500 提问时间:10/7/2023 最后编辑:snipers500 更新时间:10/8/2023 访问量:67
使用 Imagemagick 一次将图像与不透明度贴图批量合并 [已关闭]
Batch combine images with Opacity map at a time with Imagemagick [closed]
问:
闭。这个问题正在寻求有关书籍、工具、软件库等的建议。它不符合 Stack Overflow 准则。它目前不接受答案。
我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。
上个月关闭。
我有一个目录,里面装满了 *_Alb.png 和 *_Opa.png 形式的图像,其中 Opa 文件是 Alb 图像的黑白“不透明度贴图”。我想将不透明度贴图转换为反照率图像的 alpha 通道,这个文件夹中大约有 100 个,我想将其发送到另一个文件夹的输出。
我能够使用以下方法对单个图像执行此操作:
magick [filename]_Alb.png [filename]_Opa.png -compose CopyOpacity -composite done/[filename].png
但是我所做的任何尝试都无法为多个图像自动执行此操作。这是我目前使用批处理文件的尝试:
@echo off
setlocal enableextensions enabledelayedexpansion
set file=before
for /R [folder path] %%a in (./*Alb.png) do (
set "file=%%a"
magick !file:~34,0! !file:~34,-8!_Opa.png -alpha Off -compose CopyOpacity -composite output/!file:~34,-8!.png
)
它为每一行提供以下输出:
magick: image sequence is required `-composite' @ error/operation.c/CLIListOperatorImages/4057.
答:
1赞
snipers500
10/8/2023
#1
我自己设法弄清楚了
@echo off
setlocal enableextensions enabledelayedexpansion
set file=before
for /R [file path] %%a in (./*Alb.png) do (
set "file=%%a"
magick !file:~34,-8!_Alb.png ^
( +clone -alpha extract !file:~34,-8!_Opa.png -compose Multiply -composite ^) ^
-compose CopyOpacity -composite ^
output/!file:~34,-8!.png
)
我得到的错误是通过更改为尽管其中两个应该具有相同的输出来修复的。我不确定这是如何工作的,如果有人想详细说明为什么它会受到赞赏,我的理论是有一些角色魔法师不知道如何处理最后。!file:~34,0!
!file:~34,-8!_Alb.png
原始反照率文件有自己的透明度,因此为了将它们组合起来而不是丢弃它,我能够在网上找到该行。如果原始反照率文件没有任何透明度,则不需要它,并且可以按照我在第一篇文章中的方式完成。+clone
评论
0赞
Mark Setchell
10/8/2023
很酷,干得好!感谢您与 StackOverflow 社区的分享。
1赞
Compo
10/8/2023
#2
根据您的问题详细信息,似乎没有理由使用递归命令。因此,我可能会提出另一种想法。
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "SourceDir=S:\ource Dir"
Set "MagickExe=P:\ath To\magick.exe"
PushD "%SourceDir%" 2>NUL || GoTo :EOF
If Not Exist "%MagickExe%" GoTo :EOF
For /F "Delims=" %%G In ('"(Set PATHEXT=) & %SystemRoot%\System32\where.exe .:"*_Alb.png" 2>NUL"') Do (
Set "BaseName=%%~nG"
SetLocal EnableDelayedExpansion
If Exist "!BaseName:~,-3!Opa%%~xG" (If Not Exist "done\." MD "done"
"%MagickExe%" "%%G" "!BaseName:~,-3!Opa%%~xG" -compose CopyOpacity -composite "done\!BaseName:~,-4!%%~xG"
)
EndLocal
)
PopD
Endlocal
GoTo :EOF
评论
mogrify
FOR F IN *_Alb.png
!file:~34,0!
表示“从第 34 个字符开始,取 0 个字符”。它将始终返回一个空字符串。如果你想从第 34 个字符开始并抓住字符串的其余部分,那只是!file:~34!