拍照
材料
拿裁纸刀把书页裁下来,装订好的厚书中间部分无法清晰拍摄,注意不要在桌子上裁,容易把桌子划到,尽可能找一把够坚硬的尺子
设备
三角架+相机+手机控制+一张比书本略大的纸作为背景
条件
充足的照明,可以是自然光或者近距离灯光
拍摄方式
将书整齐放在背景纸上,拍一页拿走一页,拿走的页不要翻面
拍完一面之后把书页整理好,拍另一面,一部分一部分整理,否则书页对齐不了
后期处理
双面合并
用shell处理,奇数面从1开始,偶数面从2开始,每次加2,按顺序重新命名
图片压缩
imagemagick(convert)
相机拍出来比较大,需要适当压缩,加上自动白平衡
convert odd/$file -rotate -90 -resize “999x1333” -auto-level $filename
转成分片pdf
用convert需要一部分一部分转,否则内存会暴
convert *.jpg output.pdf
合并pdf
pdftk 1.pdf 2.pdf 3.pdf cat out out.pdf
制作书签
导出原有pdf信息至info文件
pdftk out.pdf dump_data output info
编辑书签文件
级别 标题 页码
1|第1章 计算机系统概论|1
2|1.1 计算机的分类|1
2|1.2 计算机的发展简史|2
书签标题转码
function make_title() {
echo -n "$1" |iconv -t unicode|od -x -d | grep -E '\<[0-9]{5}\>' |\
awk -F"[ \n]" -v RS="\n\n" '
{out_str="";
for (i=1;i<=NF;i++) {
if ($i != "" && $i != "65279") {
#print $i
out_str=out_str"&#"$i";"
}
}
print out_str
}'
}
生成pdf信息格式
function read_table() {
while IFS="|" read -r level title i; do
book_title=$(make_title "$title")
# 页码对齐
((i=i+4))
echo "BookmarkBegin"
printf "BookmarkTitle: %s\n" $book_title
printf "BookmarkLevel: %s\n" $level
printf "BookmarkPageNumber: %d\n" $i
done < $1
}
生成的信息合并到原pdf信息文件info当中
BookmarkBegin
BookmarkTitle: 目录
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: 第1章 计算机系统概论
BookmarkLevel: 1
BookmarkPageNumber: 5
BookmarkBegin
BookmarkTitle: 1.1 计算机的分类
BookmarkLevel: 2
BookmarkPageNumber: 5
生成最终文档final.pdf
pdftk out.pdf update_info info output final.pdf
踩的坑
imagemagick策略文件
/etc/ImageMagick-6/policy.xml
增加一行
<policy domain="coder" rights="read | write" pattern="PDF" />
默认不支持读写pdf
生成pdf过程中会报错,声称缓存不足(有点懞,大致是这几行,我都改了)
<policy domain="resource" name="memory" value="2GB"/>
<policy domain="resource" name="map" value="2GB"/>
<policy domain="resource" name="area" value="2GB"/>
<policy domain="resource" name="disk" value="3GB"/>
调整图像质量
1、空白部分亮度不足,尝试了-sigmoidal-contrast参数,连字体一起变谈了,最后用的-auto-level自动调整的白平衡
2、想制作扫描仪效果,尝试了生成灰度图像-colorspace Gray,背景也是灰的,尝试了二值化-threshold 40%-70%,要么整体看不清,要么一块一块黑膏药,文石的去水印挺好用,不完美但已经是最好结果