Answers:
ImageMagick。它是一个命令行工具,但功能强大且灵活,因此值得学习它。例如:
convert -extract 1024x1024+0+0 original.png target.png
哪里:
您可以将许多这些命令粘贴到.cmd文件中,并毫不费力地运行它们。
查看ImageMagick文档,了解这些命令有数千种选项。一个非常强大的工具和开源!
您可以使用引导行和断头台(切纸机)工具以行列方式在GIMP中划分图像。来自GIMP用户手册:
除了图像网格,GIMP还为您提供了更灵活的定位辅助类型:指南。这些是水平或垂直线,您可以在工作时临时显示在图像上。
要创建指南,只需单击图像窗口中的一个标尺并拉出指南,同时按住鼠标按钮。然后,指南显示为蓝色虚线,跟随指针。创建指南后,“移动”工具将立即激活,鼠标指针将变为“移动”图标。
断头台命令根据图像的指南切割当前图像。它沿着每个指南切割图像,类似于使用断头台(切纸机)在办公室中切割文档,并从碎片中创建新图像。您可以通过Image - > Transform - > Guillotine从图像菜单栏访问此命令。
我一直在使用Divide Scanned Images插件,效果很好。
我根据Zond的答案制作了一个剧本。它将根据用户输入参数平铺您的图像文件。脚本如下:
# Usage:
#
# sh crop.sh <tileset_image_file> <tileset_image_width> <tileset_image_height> <tile_size_X> <tile_size_y>
#
# Example:
# sh crop.sh tileset01.png 128 192 32 32
#
# - Will generate 24 tiles of 32x32 named tile1.png, tile2.png, ..., tile24.png
#
# Your tileset file. I've tested with a png file.
origin=$1
# Control variable. Used to name each tile.
counter=0
# Location of the tool that we are using to extract the files. I had to create a shortcut of the tool in the same folder as the script.
program=convert.exe
# The size of the tile (32x32)
tile_size_x=$4
tile_size_y=$5
# Number of rows (horizontal) in the tileset.
rows=$2
let rows/=tile_size_x
# Number of columns (vertical) in the tileset.
columns=$3
let columns/=tile_size_y
# Tile name prefix.
prefix=tile
# Tile name sufix.
sufix=.png
echo Extracting $((rows * $columns)) tiles...
for i in $(seq 0 $((columns - 1))); do
for j in $(seq 0 $((rows - 1))); do
# Calculate next cut offset.
offset_y=$((i * tile_size_y))
offset_x=$((j * tile_size_x))
# Update naming variable.
counter=$((counter + 1))
tile_name=$prefix$counter$sufix
echo $program -extract $tile_size"x"$tile_size"+"$offset_x"+"$offset_y $origin $tile_name
$program -extract $tile_size_x"x"$tile_size_y"+"$offset_x"+"$offset_y $origin $tile_name
done
done
echo Done!
该脚本使用ImageMagick中的“sh”和“convert”工具。我不确定windows cmd是否以本机方式提供sh,在这种情况下,可以看一下这个主题来实现。此外,必须在系统中安装ImageMagick,并在运行脚本的同一文件夹中安装转换工具的快捷方式。
这是另一个:将单个图像拆分为四个。必须手动将值放入下面的脚本中,具体取决于原始图像的大小。使用ImageMagick工具“识别”或“文件”工具来检查原始图像的宽度和高度。
请参阅'-extract'的命令行选项以查看如何指定'几何'。
#!/bin/bash
ORIGINAL=Integration_Tree.png
NEW_WIDTH=2598 # 1/2 of the original width
NEW_HEIGHT=1905 # 1/2 of the original height
NEW_SIZE="${NEW_WIDTH}x${NEW_HEIGHT}"
POS_IMG0="0+0"
POS_IMG1="${NEW_WIDTH}+0"
POS_IMG2="0+${NEW_HEIGHT}"
POS_IMG3="${NEW_WIDTH}+${NEW_HEIGHT}"
for X in 0 1 2 3; do
VAR="POS_IMG${X}"
NEW_GEOMETRY="${NEW_SIZE}+${!VAR}" # cunning use of bash variable indirection
CMD="convert -extract ${NEW_GEOMETRY} \"${ORIGINAL}\" \"out${X}.png\""
echo $CMD
convert -extract ${NEW_GEOMETRY} "${ORIGINAL}" "out${X}.png"
if [[ $? != 0 ]]; then
echo "Some error occurred" >&2
exit 1
fi
done
用于sh的Linux的Vitor脚本。我只需改变三条线。
#!/usr/bin/env sh
# Usage:
# sh crop.sh <tileset_image_file> <tileset_image_width> <tileset_image_height> <tile_size_X> <tile_size_y>
#
# Example:
# sh crop.sh tileset01.png 128 192 32 32
#
# - Will generate 24 tiles of 32x32 named tile1.png, tile2.png, ..., tile24.png
#
# Your tileset file. I've tested with a png file.
origin=$1
# Control variable. Used to name each tile.
counter=0
# Location of the tool that we are using to extract the files. I had to create a shortcut of the tool in the same folder as the script.
program=convert
# The size of the tile (32x32)
tile_size_x=$4
tile_size_y=$5
# Number of rows (horizontal) in the tileset.
rows=$2
rows=$((rows / $tile_size_x))
# Number of columns (vertical) in the tileset.
columns=$3
columns=$((columns / $tile_size_y))
# Tile name prefix.
prefix=tile
# Tile name sufix.
sufix=.png
echo Extracting $((rows * $columns)) tiles...
for i in $(seq 0 $((columns - 1))); do
for j in $(seq 0 $((rows - 1))); do
# Calculate next cut offset.
offset_y=$((i * tile_size_y))
offset_x=$((j * tile_size_x))
# Update naming variable.
counter=$((counter + 1))
tile_name=$prefix$counter$sufix
echo $program -extract $tile_size"x"$tile_size"+"$offset_x"+"$offset_y $origin $tile_name
$program -extract $tile_size_x"x"$tile_size_y"+"$offset_x"+"$offset_y $origin $tile_name
done
done
echo Done!