ファミ通コミッククリアで公開されている漫画を保存する

執筆日時:2013/04/15

ファミ通コミッククリアの場合

 執筆時点におけるファミ通コミッククリアの特徴は、(1) Flashビュワーを用いているがJPG画像を読み込んでいる、(2) 画像のファイルパスは規則性を持っている、(3) 画像は分割されている、の3点である。

 (1)と(2)の特徴により、漫画の画像をローカルにダウンロードするには、Firebugなどのツールを用いて、ブラウザが読み込んでいる画像ファイルのパスを調べるだけでいい。単純な連番名でファイルがサーバーに置かれているため、一話単位で全ページ一括ダウンロード(wget)するスクリプトも簡単に書ける。

 ただし3)の特徴を持つため、ダウンロードをしてきた画像をつなぎ合わせる必要がある。手動でやっていたら単行本を買う方が時給的にお得、という話になるが、imagemagickを用いてスクリプトを書けば、コンピュータにとっては大した作業量ではない。

#!/bin/bash

mkdir pages
for i in `seq 1 ${2}`
do
	# 分割されたJPGファイルをダウンロードする
	for j in `seq 1 9`
	do
		#↓のパスは目的のシリーズに合わせて変える
		wget http://ct.webcomic-eb.com/viewer/EB/narusetisa_001/sinonomeyu_001/00${1}-0/page${i}/x2/${j}.jpg
	done
	
	# PNGに変換する
	mogrify -format png *.jpg
	rm *.jpg
	
	#分割された画像ファイルをくっつける
	convert +append 1.png 2.png 3.png a.png &
	pid1=$!
	convert +append 4.png 5.png 6.png b.png &
	pid2=$!
	convert +append 7.png 8.png 9.png c.png &
	pid3=$!
	wait $pid1
	wait $pid2
	wait $pid3
	convert -append a.png b.png c.png page${i}.png
	
	# 0付きの2ケタの連番ファイル名にするための分岐処理
	if [ $i -le 9 ]
		then
			zero="0"
			fn=$zero$i
		else
			fn=$i
	fi
	
	# PNG画像の最適化でファイルサイズを小さくする
	pngcrush -l 9 page${i}.png ./pages/$fn.png
	rm *.png
done

mv pages ${1}

 上記のスクリプトは、作業用ディレクトリに移動し、巻数とページ数、2つの引数を付けて実行する。ページ数はファイルの有無で分岐させる処理を書いてもいいが、普通にFlashビュワーで開けば確認できる。

# {スクリプトを置いた場所へのパス}/comic.sh [巻数] [ページ数]

 ポイントはやはり「分割された画像ファイルをくっつける」ところで、ここではimagemagickのconvertコマンドで、+append (画像を水平方向につなげる)と-append (垂直方向につなげる)を使っている。あとは、このくっつけ作業をする上で、画像の劣化を防ぐため、最初に分割されたJPGファイルをPNGに変換し、最後までPNGで通している。途中でpngcrushを使ってPNG画像の最適化もさせるようになっているので、imagemagickの他にpngcrushもインストールしておく必要がある。最終的にできるファイルのサイズをより小さくしたければ、最後にpngからjpgに変換するのもいいと思われる。

 なお、途中で作業用ディレクトリの中にある.jpgや.pngのファイルを全削除するコマンドが入っているので、作業用のディレクトリは空、少なくとも消してはいけない.jpgや.pngファイルを含まないようにするべきである。