iOSのホーム画面とロック画面の画像の抽出方法
はじめに
私のiPhoneの壁紙はポケモンスタイル(昔あった壁紙やアイコンをポケモンのデザインに着せ替えるためのiPhone,Android用アプリ)で購入したイーブイの壁紙なのですが、
ポケモンスタイルがサービスを終了し、その壁紙画像をiPhoneのフォトライブラリから削除してしまったため、
このイーブイの壁紙の画像を手に入れることができなくなりました。
なので、この記事は、iPhoneの壁紙をなんとかして、画像として抽出することを目指したものです。
ちなみに、私の環境はMacBook AirとiPhone SE(第1世代)です。
全体的な流れとしては、iOS端末からcpbitmapファイルを抽出して、それをpngに変換するという感じになります。
▼可愛いイーブイを救出せよ!!(まるで気分はポケモンレスキューのようだ)
iOS端末を事前にiTunesでバックアップしておく
iBackupBotでcpbitmapファイルを抽出
iBackupBotをmacにインストール
ロック画面のファイルの場所は、
System Files/HomeDomain/Library/SpringBoard/LockBackground.cpbitmap
ホーム画面のファイルの場所は、
System Files/HomeDomain/Library/SpringBoard/HomeBackground.cpbitmap
となります。
この2つのファイルを右クリックExport selected item(s)で任意のフォルダ(ここではDownloadフォルダ)に抽出します。
Pythonまわりの設定
pythonコードにPythonの画像処理ライブラリPillow(PIL)が必要なので、それをインストールします。
pipがインストールされていない場合、
$ sudo python -m ensurepip
で有効にし、
$ sudo pip install --upgrade pip
で最新版にします。 PILのインストールをします。
$ sudo pip install Pillow $ pip list
でPillowが入っていることを確認します。
cpbitmapをpngにPythonコードでもって変換する
以下はconvert_cpbitmapです。これをDownloadフォルダに作成します。
#!/usr/bin/python from PIL import Image,ImageOps import struct import sys if len(sys.argv) < 3: print "Need two args: source_filename and result_filename\n"; sys.exit(0) filename = sys.argv[1] result_filename = sys.argv[2] with open(filename) as f: contents = f.read() unk1, width, height, unk2, unk3, unk4 = struct.unpack('<6i', contents[-24:]) im = Image.frombytes('RGBA', (width,height), contents, 'raw', 'RGBA', 0, 1) r,g,b,a = im.split() im = Image.merge('RGBA', (b,g,r,a)) im.save(result_filename)
これを実行可能にします。
$ chmod 755 convert_cpbitmap
Pythonコードを実行します。
$ ./convert_cpbitmap HomeBackground.cpbitmap HomeBackground.png $ ./convert_cpbitmap LockBackground.cpbitmap LockBackground.png
これで救出できました!!めでたしめでたし。
ちなみに、この画像を手に入れた私は、iPadにも同じ壁紙を適用しましたとさ。
参考資料
iOSのcpbitmapの抽出関連
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11108634676
https://apple.stackexchange.com/questions/32989/is-it-possible-to-export-the-current-iphone-wallpaper
pipのインストール
https://teratail.com/questions/35614
PILのインストール
https://note.nkmk.me/python-pillow-basic/
pythonコード
https://gist.github.com/danielsharvey/929a525712a2b89ebb561226cc32f3e7
https://stackoverflow.com/questions/7998324/dot-cpbitmap-images-imgaename-cpbitmap/