转换

最近我从网上搞到了些别人扫描成图片并共享的小时候在上面消耗了无穷时光的漫画书,这其中包括《七龙珠》、《圣斗士星矢》等。这些书分册分卷。一般来说每卷都被制作成了单独的以卷名及其编号命名的压缩文件,譬如“七龙珠海南版卷1 小悟空和他的伙伴们.rar”;每个压缩文件里包含了按顺序编号的每页图书的扫描成的jpg文件。对我而言,把这些图片合并成每卷或者每册独立的pdf文件将极大方便收藏和管理。由于漫画书卷数众多——譬如,《七龙珠》海南版有43卷)——手动解压合并转换显得费时费力。于是我在Windows 7/8上使用如下方法对这个过程实现自动化。

我们使用的工具,包括7-Zip 9.20, ImageMagick6.8.7-0,还有Powershell 3.0.

以下操作皆在PS终端中进行。在cmd下输入’Powershell’及回车即可进入PS终端。

首先我们要进入包含将所有感兴趣的漫画各卷的压缩文件的文件夹,并把它们分别解压到以其对应卷名命名的文件夹里去。在这个例子里,如果我们ls当前目录,可以看到如下结果。

Directory: C:\test_image

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2013-10-14 12:12 PM 13289 dir1.rar
-a--- 2013-10-14 12:13 PM 3425 dir2.rar

PS脚本如下。

# unzip all zip files to directories
$items = Get-ChildItem -Path .\ *.rar
ForEach ($f in $items) {
$d = $f.BaseName;
& "C:\Program Files\7-Zip\7z.exe" x $f.FullName -o"$d";
}

以上脚本将当前目录下的以rar作为扩展名的文件信息保存到$items变量中去,然后对于每个文件得到基本名(也就是文件名里除去扩展名.rar的部分),然后调用7-Zip将rar文件解压到以基本名命名的相应子目录中去。此时当前目录下包含了所有解压的各卷的子目录。譬如,在这个例子里,如果我们ls当前目录,可以看到如下结果。


Directory: C:\test_image

Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2013-10-14 12:18 PM dir1
d---- 2013-10-14 12:18 PM dir2
-a--- 2013-10-14 12:12 PM 13289 dir1.rar
-a--- 2013-10-14 12:13 PM 3425 dir2.rar

然后我们遍历这些解压子目录,使用ImageMagick将这些目录里的jpg文件合并成对应名录名命名的pdf文件。

# convert jpg files in subdirectories into pdf files of letter sized pages
Get-ChildItem . |
?{ $_.PSIsContainer } |
ForEach-Object {
$outfile = $_.FullName + ".pdf";
$items = Get-ChildItem -Path $_ *.jpg;
& "C:\Program Files\ImageMagick-6.8.7-Q16\convert.exe" $items.FullName -gravity center -format pdf $outfile;
}

以上脚本的前两行得到当前目录下子目录(而不是常规文件)的信息。紧接着它调用ImageMagick的`convert`程序将每个子目录下的图片自动调整尺寸并合并成PDF文件。

现在如果在当前目录下`ls *.pdf`,可以看到转换完成的pdf文件们。

Directory: C:\test_image

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2013-10-14 12:31 PM 20105 dir1.pdf
-a--- 2013-10-14 12:31 PM 12295 dir2.pdf

现在我们可以把转换好的文件整理归档保存。

Advertisements


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s