我有一系列图像(> 100),想要以特定的尺寸打印,该尺寸允许我将 8 张图像放在一页中,但是当运行下一个命令时,我会逐页获取一张图像。
img2pdf *.png --pagesize letter --border 2cm --imgsize 6.3cmx8.8cm --fit shrink --output cards.pdf
我在命令中缺少什么来实现我想要的布局(2 列 4 张图片)?
PD:我读过手册页但我没有找到任何相关信息,不知道是否有可能
答案1
使用ImageMagick
的工具montage
。如果您的文件命名如下:
0.png 1.png 2.png 3.png 4.png 5.png 6.png 7.png
[0-7].png -tile 2x4 -geometry +0+0 0-7_montage.png && img2pdf 0-7_montage.png --pagesize letter --border 2cm --imgsize 6.3cmx8.8cm --fit shrink --output cards.pdf
更新:这是处理 100 张图像的方法。
将 100 更改for i in {0..100..8}; do
为您的具体数字。
顺序文件名迭代:
#!/bin/bash
output_dir="output_pdfs"
# Create the output directory if it doesn't exist
mkdir -p "$output_dir"
# Iterate over sets of 8 images
for i in {0..100..8}; do
input_images=$(seq -f "%d.png" $i $((i+7)))
montage $input_images -tile 2x4 -geometry 332x238+5+5 "$output_dir/montage_output_$i.png"
img2pdf --pagesize letter --imgsize 669 --output "$output_dir/cards_$i.pdf" --fit shrink "$output_dir/montage_output_$i.png"
done
再次更新:事实证明,这对文件名非常挑剔。因此,这是一个基本上文件名无懈可击的版本。将接受png
&jpg
格式。
按字母顺序迭代所有文件名:
#!/bin/bash
output_dir="output_pdfs"
# Create the output directory if it doesn't exist
mkdir -p "$output_dir"
# Get a sorted list of image filenames (with quotes)
image_files=($(ls -1Q *.{jpg,png} | sort))
# Iterate over sets of 8 images
for ((i = 0; i < ${#image_files[@]}; i += 8)); do
input_images=("${image_files[@]:i:8}")
echo "Processing images: ${input_images[@]}"
montage "${input_images[@]}" -tile 2x4 -geometry 332x238+5+5 "$output_dir/montage_output_$i.jpg"
img2pdf --pagesize letter --imgsize 669 --output "$output_dir/cards_$i.pdf" --fit shrink "$output_dir/montage_output_$i.png"
done
保存到:montage_to_pdf.sh
将模式更改为可执行:chmod +x montage_to_pdf.sh
用法:montage_to_pdf.sh
在包含图像的目录中运行。