ubuntu - imagemagick 构建每 A4 页两张图像的文档

标签 ubuntu command-line imagemagick

使用 Ubuntu 14.04 Linux,我在名为 Capture 01.jpgCapture 02.jpg 的文件夹中有一个 .jpg 图像列表等,我想编写一个命令行,创建一个包含 A4 大小页面的多页文档,其中每个页面按给定顺序包含 2 个图像,以文件名作为标题,并以页面为单位包含页脚,如“第 1 页,共 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 的工作原理,我认为这将涉及某种 collat​​emontage 命令,但我不确定如何使其适合 A4 大小的页面以及如何设置它们的打印格式(pdf?)。

有什么建议吗?

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

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

最佳答案

首先,我建议您的文件名中不要有空格,并使用足够多的前导零,以便目录中的文件按字母顺序排列。

我拍了这张照片:

enter image description here


再重复5次,并按顺序编号:

lena_01.png
lena_02.png
lena_03.png
lena_04.png
lena_05.png
lena_06.png

并将它们放入 Mac 桌面上名为“test”的新文件夹中。

然后使用 ImageMagick 6 和 Unix bash shell 脚本,我在子 shell 内创建了一个循环,以便可以将中间图像保存为 MIFF: 格式,而不必单独保存它们。然后我将输出通过管道传输到新的转换程序以另存为 PDF。请注意,子 shell 由 for 循环周围的括号表示。

这是命令集:

#!/bin/bash

cd
cd desktop/test
arr=(`ls`)
num=${#arr[*]}
numm1=$((num-1))
numpages=`echo "scale=0; ($num+0.5)/2" | bc`
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=$((pagenum+1))
  done
) | convert - ../result.pdf


其中 arr 是测试目录中图像名称的数组。请注意,A4 页面尺寸为 595x842,72 dpi 打印尺寸为 8.27 × 11.7 英寸

result.pdf

如果您确实想在文件名中保留空格,则可以将 IFS 更改为 arr 语句之前的新行,然后将其更改回空格。例如:

lena 01.png
lena 02.png
lena 03.png
lena 04.png
lena 05.png
lena 06.png

代码将更改为以下内容:

cd
cd desktop/test
OLDIFS=$IFS
IFS=$'\n'
arr=(`ls`)
num=${#arr[*]}
numm1=$((num-1))
numpages=`echo "scale=0; ($num+0.5)/2" | bc`
echo "numpages=$numpages"
pagenum=1
IFS=$OLDIFS
(
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=$((pagenum+1))
done
) | convert - ../result2.pdf

result2.pdf

关于ubuntu - imagemagick 构建每 A4 页两张图像的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50491977/

相关文章:

ubuntu - 为 hadoop 设置无密码 ssh

linux - 通过 bash 脚本检查服务是否正在运行

c# - 使用 ImageMagick.Net 将 JPG 转换为背景透明的 PNG

mysql - 仅使用 root 密码访问 MySQL 数据库

ruby-on-rails - 用于调整大小的 ImageMagick 的替代方案

python-3.x - 如何使用魔杖扭曲图像

c++ - 运行 OpenCV_Sample 的 stereo_match.cpp

ubuntu:定位命令返回错误结果

windows - CMD 脚本 : How to close the CMD

ruby - 编写 openssl 脚本以生成许多证书而无需手动输入密码?