開発者ブログ
HTML5資料室 » OpenSeadragon

OpenSeadragon

Last modified by mitsubuc on 2013/12/18, 10:48

OpenSeadragon

OpenSeadragon について調査したことをまとめたページです。

調査時期
2013 年 12 月
調査対象
OpenSeadragon 1.0.0

OpenSeadragon 概要

公式サイトhttp://openseadragon.github.io/
ライセンスNew BSD
開発元OpenSeadragon contributors

OpenSeadragon は画像の拡大縮小を Web 上でスムーズに行うための JavaScript のライブラリです。

OpenSeadragon は Silverlight の DeepZoom 機能 に相当するものを JavaScript で実装したもので
DeepZoom で利用される DZI 形式 のファイルをそのまま扱うことができます。DZI 形式以外にも IIIF 形式や TMS 形式などのファイルを扱うことができます。

参考リンク集

サンプルコード

OpenSeadragon をつかったページのサンプルコードを以下に載せておきます。
以下の HTML が '/index.html' にあり OpenSeadragon が '/lib/openseadragon-1.0.0'、DZI形式のファイルが '/dzi' にあるというディレクトリ構造になります。
DZI 形式のファイルを作る方法は OpenSeadragon 用の画像フォーマットを作成するためのツール群 を参考にしてください。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1, user-scalable=no">
        <title>OpenSeadragon Sample</title>
    </head>
    <body>
        <div id="deepZoom" style="background-color: black;"></div>
        <script src="lib/openseadragon-1.0.0/openseadragon.min.js"></script>
        <script>

            var viewer = OpenSeadragon({

                // div 要素の id を指定
                id: 'deepZoom',

                // OpenSeadragon の images のパスを指定
                prefixUrl: 'lib/openseadragon-1.0.0/images/',

                // DZI の xml ファイルのパスを指定
                tileSources: 'dzi/dzc_output.xml'
             });

             viewer.setFullPage(true);
        </script>
    </body>
</html>

OpenSeadragon 関数に渡すことができるオプションについては ここ を参照してください。

スマートデバイス上で OpenSeadragon を動かす際の問題

スマートデバイス上での利用を想定して OpenSeadragon を調査する中で見つけた問題を以下にまとめます。

ピンチの反応が悪い問題

OpenSeadragon を利用したページをスマートデバイスで閲覧したときに、
ピンチ操作で拡大縮小をしようとすると、操作に対する反応がにぶい(と感じる人が続出する)という問題がありました。

これに対して OpenSeadragon 1.0.0 の openseadragon.js の 3867-3868 行目には以下のようなコードがあります。

//TODO: make the 75px pinch threshold configurable
if ( Math.abs( THIS[ tracker.hash ].lastPinchDelta - pinchDelta ) > 75 ) {

コメントにもあるように 75 という値がピンチ判定の閾値として直接コードに記述されており、
試しにここの値を 25 と小さくしてみたところ、ピンチの動きがとてもスムーズになりました。
そのため、開発が進んでこの値が設定できるようになることで、将来的にはこの問題は解決する見込みです。

一部の Android の標準ブラウザでメモリリークする問題

OpenSeadragon を利用したページを Android 4.1.1 & Galaxy Nexus 上の標準ブラウザで閲覧した際に、
ページを何度もリロードしていると画像が一部表示できなくなる問題があります。

なぜこういった現象が起こるかを調べたところ、Android 標準ブラウザの canvas 利用時のメモリリーク が原因だとわかりました。
canvas を利用することによる問題となりますので、メモリリークが発生する環境では useCanvas オプションを false とすることでこの問題を回避することができます。
ただし useCanvas オプションに false を指定すると、以下のようなデメリットがあります。

  • OpenSeadragon の debug モードを利用できなくなる
  • canvas を利用していたときと比較してピンチで大きく拡大したいときや、拡大からすぐに縮小に移るときにスムーズに動作しないことがある

Copyright (C) 2012-2017 NS Solutions Corporation, All Rights Reserved.