그래서 저는 확장하고 싶은 픽셀 아트 게임의 픽셀 아트 PNG가 약 수천 개 있습니다. 내 소프트웨어를 알아냈어요(2d이미지 필터)그러나 소프트웨어는 GUI 및 CLI 버전 모두에서 하나의 이미지만 사용합니다.
자동화하려면 어떻게 해야 합니까?
구문은 다음과 같습니다:
imgresizer.exe /load [IMAGE.png] /resize auto "LQ 4x" /save [OUTIMAGE].png
답변1
소프트웨어는 GUI 및 CLI 버전 모두에서 하나의 이미지만 사용합니다.
ImageResizer v129( )의 명령줄 도움말 옵션에 따라 imgresizer.exe -h
명령줄에서 처리할 여러 파일을 지정할 수 있습니다.
여러 파일을 다시 저장한 후 불러와서 한번에 불러와서 처리할 수 있습니다.
전. ImageResizer 예제 코드
imageresizer.exe /load 1.bmp /resize 10x10 Pixel /save 1.jpg /load 2.bmp /resize 10x10 Pixel /save 2.jpg
얼핏 보면 이 옵션은 ImageResizer-r17.exe
.
또한 ImageResizer v121( ImageResizer-r121.exe
)부터 "스크립트"가 지원되는 것으로 보입니다. 예:
전. example_script.txt
/load 1.png /resize auto "LQ 4x" /save 1.png
/load 2.png /resize auto "LQ 4x" /save 2.png
전. ImageResizer 명령
imgresizer.exe /script example_script.txt
따라서 이 옵션을 사용하면 여러 파일을 동시에 처리할 수도 있습니다.
일반적인 유효하지 않은 명령과 마찬가지로 ImageResizer는 주어진 스크립트를 처리할 수 없는 경우 "도움말" 정보를 인쇄하는 것 같습니다.
[이것을] 자동화하려면 어떻게 해야 합니까?
일반적인 접근법
ImageResizer의 적어도 일부 버전은 배치 지침(위의 "스크립트")을 사용할 수 있으므로 기본 선택은 다음 중 하나입니다.
imageresizer.exe
각 파일에 대해 반복적 으로 직접 호출하는 스크립트를 만듭니다 .원하는 이미지를 처리하기 위해 ImageResizer가 사용할 텍스트 파일을 만드는 스크립트를 생성하거나 다른 방법을 사용하십시오.
간단한 예
파일이 포함된 폴더에서 다음과 같은 파일 이름과 폴더 이름만 포함하는 텍스트 파일을 만듭니다.
dir /b > filenames.txt
예를 들어 폴더 이름을 제거하십시오
filenames.txt
. 처리하고 싶지 않은 파일 이름에 대해 반복한 다음 저장하세요.
옵션 3A - 기존 스크립트
일괄FOR 루프실행 파일을 반복적으로 호출하는 데 사용할 수 있습니다. 배치 확장자( .bat
) 및 다음과 유사한 내용을 사용하여 텍스트 파일을 만듭니다.
전. resizer.bat
FOR /F %%G IN (filenames.txt) DO (
imageresizer.exe /load %%G /resize auto "LQ 4x" /save %%G
)
filenames.txt
예를 들어 이 배치 파일을 처리하려는 파일과 동일한 디렉토리에 배치하십시오 . 그런 다음 예를 실행하십시오. resizer.bat
명령줄에서 또는 두 번 클릭하면 됩니다. 이 경우 %%G
ex.에서 읽은 줄입니다. filenames.txt
.
옵션 3B - ImageResizer "스크립트"
filenames.txt
예를 들어 다음 에서 엽니다 .메모장++, 그런 다음 사용정규 표현식간단한 파일 이름을 원하는 명령으로 바꾸려면 다음을 수행하십시오.
메모장을 엽니다++바꾸다Ctrl+ 를 사용한 대화상자 H.
Wrap around
및 옵션이 표시되어 있는지 확인하십시오Regular expression
.해당
Find what:
필드에서 괄호.*
안에 영향을 미치고 싶은 파일 확장자를 입력하세요..png
:(.*.png)
필드 에
Replace with
ImageResizer 명령을 입력하되$1
파일 이름 대신 다음과 같은 이름을 사용하세요./load $1 /resize auto "LQ 4x" /save $1
%1
ex와 일치하는 항목으로 대체됩니다.(.*.png)
.선택하다
Replace all
.전. Notepad++ - 바꾸기 대화 상자
그러면 모든 파일 이름이 다음과 같은 형식으로 바뀌게 됩니다.
/load file1.png /resize auto "LQ 4x" /save file1.png /load file2.png /resize auto "LQ 4x" /save file2.png
새 텍스트 파일(예:
example_script.txt
)을 저장한 다음 이를 사용하여imageresizer.exe
스크립트를 실행합니다. 예:imgresizer.exe /script example_script.txt
파이썬
다음을 통해 현재 디렉터리와 모든 하위 디렉터리의 imgresizer.exe /load [IMAGE.png] /resize auto "LQ 4x" /save [OUTIMAGE].png
각 이미지를 호출하는 예.png
윈도우의 파이썬 3:
# An example of how to use os.walk() and subprocess.run() to find desired files
# and feed them to ImageResizer.
import os
import os.path
import subprocess
# --- Variables, Etc. ---
# Directory where our files are stored. '.' is the current directory (whichever
# directory this script appears in). However, this can be any starting folder.
ROOT_DIR = '.'
# What type of files are we looking for?
# PREFIX = 'image_'
EXT = '.png'
# A list to hold our file path information.
full_paths = []
# --- Functions ---
# A small, custom function to build our ImageResizer command.
def build_command(filepath):
# This string is directly invoked at the command line. Watch for spacing.
# "\" breaks our long command into two separate lines.
cmd_str = 'imageresizer /load ' + filepath + \
' /resize auto "LQ 4x" /save ' + filepath + '.jpg'
return cmd_str
# ----- Main -----
for dirpath, dirnames, filenames in os.walk(ROOT_DIR):
# Track the full path to our individual files.
for name in filenames:
# if name.startswith(PREFIX) and name.endswith(EXT):
if name.endswith(EXT):
# Test code
# print(name)
full_path = os.path.join(dirpath, name)
full_paths.append(full_path)
# -----
# Visual aid
print('')
for path_item in full_paths:
# Test code
# print(path_item)
# Put our file paths in quotes so we don't get errors when processing
# sub-directories with spaces in their names.
path_item = '"' + path_item + '"'
try:
# Custom function -> build_command()
cmd = build_command(path_item)
# Test code
# print(cmd)
subprocess.run(cmd, check=True)
# Catch/print errors produced when calling ImageResizer with subprocess.
except (OSError, subprocess.CalledProcessError) as err:
# pass
print('')
print(err)
Python 스크립트 참고 사항
os.walk()
파일/디렉토리 정보를 읽고subprocess.run()
Python이 아닌 외부 명령 등을 호출하는 데 사용됩니다imageresizer.exe
.에 전체 경로를 사용하는 경우 경로 구분 기호 대신
ROOT_DIR
사용하십시오 . 예:\\
\
ROOT_DIR = 'C:\\Example\\Path'
os.walk(ROOT_DIR)
트리의 각 디렉터리에 대해 세 가지 항목을 생성합니다.dirpath
현재 (하위)디렉토리에 대한 경로입니다.dirnames
는 ( 및dirpath
제외 ) 의 하위 디렉토리 이름 목록입니다 ..
..
filenames
에 있는 디렉토리가 아닌 파일의 이름 목록입니다dirpath
.
dirnames
위 및 목록 의 이름은filenames
"기본"입니다. 즉, 경로 구성 요소가 포함되어 있지 않습니다.OSError
OS에서 생성된 오류, 즉 파일 등을 포착하고subprocess.CalledProcessError
호출된 프로세스에 문제가 있었는지 알려줍니다subprocess.run()
(즉, 0이 아닌 값을 반환함).
Python 가져오기 참조
답변2
위의 답변은 정확하지만 2센트를 추가하고 싶습니다.
원하는 프로세스는 PowerShell을 사용하여 수행할 수 있습니다. 여는 방법을 모르는 경우 다음을 사용할 수 있습니다.
Win+ R>>유형 powershell
>> Ctrl+ Shift+Enter
그런 다음 다음 코드를 사용하여 모든 이미지를 재귀적으로 처리할 수 있습니다.
$files=(Get-ChildItem -path "path\to\folder" -force -recurse -filter "*.png").fullname | %{if ($_ -match "\s") {'"'+$_+'"'}}
foreach ($file in $files) {Invoke-Command $("imgresizer.exe /load {0} /resize auto "LQ 4x" /save {0}" -f $file)}
"path\to\folder"를 실제 경로로 바꾸십시오.
PS 위 명령은 실행 파일의 전체 경로가 imageresizer.exe
제공되는 1인 경우에만 작동합니다. 2, 실행 파일이 있는 경로로 디렉터리를 변경했습니다. 마지막으로, 3. 경로를 에 추가한 경우 cd
해당 경로로 이동 하거나 전체 경로를 사용할 필요가 없습니다..exe
길환경 변수.