LoginSignup
8
13

More than 5 years have passed since last update.

DeepZoomファイル形式.DZIをPythonで作成してみる

Last updated at Posted at 2015-01-07

DZIについては僕なんぞが説明するよりMicrosoft様の用意しているページを見てもらったほうが早いと思います。

一枚で100MBある画像でも一画面に表示できる領域って1MB程度なんで、1000分割くらいして表示領域だけ読みこめばいいじゃん、って考え方です。雑ですが。

それってデータ作成より表示のプログラムの方が大変じゃね?って思われる方、正解です。
そちらについては別記事「Google Mapsライクなオープンソース高解像度画像ビューアを使ってみる」で公開しました。
僕はActionScriptとCoffeeScriptでそれぞれ自作しましたが、DZIフォーマットを知らなかったという悲しい経緯とあわせて別の機会にご紹介したいと思います。

話をDZIに戻しましょう。
DZIファイルを作成するツールは既にPythonで作られているので、それをダウンロードして試しましょう。

PILのインストール方法についてはREADMEに書かれていますのでそれをご参照ください。

サンプルプログラムの中身についてはあんまり説明するまでもないほどに単純なんですが、
examples/helloworld/helloworld.pyを覗いてみます。


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import deepzoom

# Specify your source image
SOURCE = "helloworld.jpg"

# Create Deep Zoom Image creator with weird parameters
creator = deepzoom.ImageCreator(tile_size=128, tile_overlap=2, tile_format="png",
                                image_quality=0.8, resize_filter="bicubic")

# Create Deep Zoom image pyramid from source
creator.create(SOURCE, "helloworld.dzi")

入力画像と出力画像を変えればほぼオッケーですね・・・。
一応ImageCreaterのオプションをチェックしてみます。

ここではOpenZoomの表記にのっとり、正方形に分割した画像を「タイル」と呼びます。

tile_size
画像を縦横何pxで分割するか。
DZIのタイルは基本的に正方形です。

tile_overlap
これは画像見てもらった方が早いですね。

2932771418_82ceddfa0b.jpg

タイルを余白(と呼べばいいのか)無しに分割してならべると、チラつきがでることがあります。
これを防ぐためにtile_sizeより大きめに分割するオプションがtile overlapと呼ばれます。

tile_format
これは読んでそのまま。今回はpngで出力しますが、jpgなどでも出力可能です。

image_quality
これもそのままですね。画像の品質の指定です。
1が上限になります。

resize_filter
これ専門すぎて僕も全部知りませんが、詳しく知りたい方は下記を。
http://www.dfx.co.jp/dftalk/?p=13061

こだわりが無ければbicubicで良いと思います。

他にも細かい取り決めがありますので、詳しく知りたい方は下記を御覧くださいませ。
http://www.openzoom.org/

さて、オプションと入力画像、出力ファイル名を指定したらあとは叩くだけ


$ python helloworld.py

これで同じディレクトリ内にDZIファイルとファイル名_imagesディレクトリが作成されたはずです。

ビューアについては「Google Mapsライクなオープンソース高解像度画像ビューアを使ってみる」で解説します。

おつかれさまでした。

8
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13