imagemagick构造文档,每A4页有两个图像

时间:2018-05-23 15:15:41

标签: ubuntu command-line imagemagick

使用Ubuntu 14.04 Linux,我在.jpgCapture 01.jpg等文件夹中有一个Capture 02.jpg图像列表,我想创建一个创建一个命令行的命令行具有A4大小的页面的多页文档,其中每个页面按照给定的顺序包含2个图像,文件的名称作为标题,并且页面包含页脚,例如' Page 1 of 41'。参见,例如:

------
Capture 01.jpg

[image]

Capture 02.jpg

[image]
Page 1 of 41
------
Capture 03.jpg

[image]

Capture 04.jpg

[image]
Page 2 of 41
------
...

图像大小相同,大约1600x1200像素。

了解ImageMagick的工作原理,我认为这将涉及某种collatemontage命令,但我不确定如何使其适合A4大小的页面以及如何格式化它们印刷(pdf?)。

有什么建议吗?

编辑:我发现了一个与添加图片文件名有关的问题:

Overlaying an image's filename using ImageMagick (or similar)

1 个答案:

答案 0 :(得分:1)

fmw42的请求中,这是我的版本,我认为这是一个改进,因为可以更好地处理“困难”的文件名。

首先进行一些设置 创建目录,下载图像,复制x6并给出新的古怪名称。

#!/bin/bash

cd ~/Desktop
mkdir testimagesSO
cd testimagesSO
wget "https://i.imgur.com/GeaEv21.png"

mv *.png testimage.png

Names=("Drøbaksundet\n img #1*" "Drøbaksundet\n img #2*" "Drøbaksundet\n img #3*" \
       "Drøbaksundet\n img #4*" "Drøbaksundet\n img #5*" "Drøbaksundet\n img #6*" )

echo "${#Names[@]}"

for f in "${Names[@]}"
do
  cp testimage.png "$f".png
done

rm testimage.png

该命令的内容与fmw42非常相似,除了它完全基于数组。我还介绍了使用bc

arr=(*)
num=${#arr[*]}
numm1=$((num-1))
npp=2
numpages=$((($num+$npp-1)/$npp))
echo "numpages=$numpages"
pagenum=1
(
for ((i=0; i<numm1; i=i+2)); do
  j=$((i+1))
  convert "${arr[$i]}" "${arr[$j]}" -background white -gravity center -append \
  -resize 595x842 -extent 595x842 +repage \
  -font arial -pointsize 18 -undercolor white -fill black \
  -gravity north -annotate +0+10 "${arr[$i]}" \
  -annotate +0+431 "${arr[$j]}" \
  -gravity south  -annotate +0+10 "Page $pagenum of $numpages" miff:-
  pagenum+=1
done
) | convert - ../result2.pdf

我没有方便托管PDF的地方,但这或多或少是我得到的输出(想象它分为3页A4。

enter image description here