我研究了提供的答案,然后将它们与我的扫描仪进行了比较,该扫描仪可以扫描为PDF或图像(通常为JPEG)。我发现以下内容:
- 通常扫描仪以300 DPI工作,有时在600 DPI或150 DPI以下
- 扫描的图像通常是完整的24位RGB颜色(每个波段8位),通常被压缩为JPEG
- 然而,PNG通常用于数字绘画,通常是带调色板的8位
- PDF通常是多页的,而PNG和JPEG通常是单页的
当从PDF转换为PNG时,我们必须问自己是否要使用默认的300 DPI,还是要以更高分辨率的600 DPI或更低分辨率的150 DPI重新采样图像。我们还必须问自己PDF是否包含照片,因此我们需要24位图像,即png16m
。或者,如果PDF只包含数字文档,主要是黑白文本,但可能包含有限数量的颜色,则8位图像格式就足够了,即png256
。我们还需要问自己是否想要访问多个页面,还是满足于一个页面。
对于其余的答案,我将假设300 DPI和不包含照片的数字文件,即8位格式(或256色格式)。
对于单页提取,我确定需要的参数是PDF
、PNG
和PAGENO
:
#!/bin/bash
PDF=$1
PNG=$2
PAGENO=$3
FORMAT=png256
DPI=300
cmd=(gs)
cmd+=(-dNOPAUSE)
cmd+=(-q)
cmd+=(-sDEVICE=${FORMAT})
cmd+=(-r${DPI})
cmd+=(-dBATCH)
cmd+=(-dFirstPage=${PAGENO})
cmd+=(-dLastPage=${PAGENO})
cmd+=(-sOutputFile=${PNG})
cmd+=(${PDF})
${cmd[@]}
对于多页提取,我需要确定需要的参数为PDF
和DIR
:
#!/bin/bash
PDF=$1
DIR=$2
FORMAT=png256
DPI=300
mkdir -p ${DIR}
cmd=(gs)
cmd+=(-dNOPAUSE)
cmd+=(-q)
cmd+=(-sDEVICE=${FORMAT})
cmd+=(-r${DPI})
cmd+=(-dBATCH)
cmd+=(-sOutputFile=${DIR}/'p%d.png')
cmd+=(${PDF})
${cmd[@]}
要将页面重新组合成PNG,我们可以使用ImageMagick的convert
命令,如下所示:
#!/bin/bash
DIR=$1
PDF=$2
convert ${DIR}/*.png ${PDF}