はじめに

古地図や古文書には、様々な方向に傾いた文字が含まれています。本ツールでは、多角形(ポリゴン)アノテーションを使用して傾いた文字を正確にマークアップし、その傾き情報を活用してIIIF Image APIで回転補正された画像を取得できます。

傾き計算の仕組み

頂点の順序ルール

多角形アノテーションを作成する際、以下の順序で頂点を指定します:

  1. 左上 → 2. 左下 → 3. 右下 → 4. 右上

この反時計回りの順序を守ることで、傾き角度を一意に計算できます。

((12))((43))

以下のデモ動画も参考にしてください。

https://youtu.be/P9srTeynXuk?si=mJO1yu3IhR0QFV-2

角度の計算方法

上辺(左上→右上)のベクトルから傾き角度を計算します:

ccclioooefnnntSMsssI(VtttIiiGx0Iii1(ddaFii,xynffygRR1)==loo,ettLaa=ttx..ii21xyMoo,(anny--t2h=<).L,a-0..ta)xxyan3;;ngi,22liy((ei3d;fyRL),o,txda433xt,..)iy3xyo4(n--Z(+)1=80003..6xy/0;Math.PI);

実際の使用例

例1: 横書きでほぼ水平な文字

アノテーションデータ:

{}"]se{}{}l,e""""ctvtvtyayaoplplreueu""e"e::":"::[""F"S"rxv<aygsgwSvmhege=ln9ext0cmS3tle0onl,rse1"=c5,\t5"o9hr0t",t,1p2:3/1/,w2w4w4."w3.org/2000/svg\"><pathd=\"M9034.6115828.17L10261.0615835.12L10262.0815596.18L9030.3315590.72Z\"/svg>"

計算:

ddaixyni::gi==lf((eR9991o0005=t3335a4009at...0ti633.ao1337nn,,22-(=11--5592985013129357°8048....2417685721.,))1=7-4-=.42.-822)837.4-591.0°

結果:

  • region: 9030,15590,1231,244
  • rotation: 91

例2: 斜めに傾いた文字

アノテーションデータ:

{}"]se{}{}l,e""""ctvtvtyayaoplplreueu""e"e::":"::[""F"S"rxv<aygsgwSvmhege=ln8ext8cmS4tle3onl,rse1"=c8,\t7"o7hr3t",t,3p2:0/,/3w6w5w".w3.org/2000/svg\"><pathd=\"M9064.9719139.05L9163.9818836.97L8944.3018773.62L8843.7319059.54Z\"/svg>"

計算:

ddaixyni::gi==lf((eR9881o0889=t6440a4335at...9ti977.ao7335nn,,42-(=11--999711001963569.099415°...310599,547.))0-=522-=12.2-2174.9)2.451-160.2°

結果:

  • region: 8843,18773,320,365
  • rotation: 160

IIIF Image APIでの画像取得

URL構造

IIIF Image APIのURL構造:

{scheme}://{server}{/prefix}/{identifier}/{region}/{size}/{rotation}/{quality}.{format}

回転なしの画像

https://example.org/iiif/image/8843,18773,320,365/,200/0/default.png

傾き補正された画像

https://example.org/iiif/image/8843,18773,320,365/,200/160/default.png

透明背景で取得

回転により生じる余白を透明にするには、PNG形式を使用します:

https://example.org/iiif/image/8843,18773,320,365/,200/160/default.png

※ JPEG形式の場合、余白は白で埋められます。

回転機能の対応状況

IIIF Image APIの回転(rotation)機能は、すべての画像サーバーでサポートされているわけではありません。IIIF Image APIには以下のCompliance Levelが定義されています:

Level回転機能
Level 00度のみ対応
Level 10度のみ対応
Level 20, 90, 180, 270度に対応(任意角度はオプション)

https://iiif.io/api/image/3.0/compliance/#33-rotation

https://iiif.io/api/image/2.1/compliance/#rotation

多くの画像サーバーはLevel 1またはLevel 2で運用されており、任意角度の回転に対応していない場合があります。対応状況は各画像サーバーのinfo.jsonで確認できます。

ccclioooefnnntSMsssI(VtttIiiGx0Iii1(ddaFii,xynffygRR1)==loo,ettLaa=ttx..ii21xyMoo,(anny--t2h=<).L,a-0..ta)xxyan3;;ngi,22liy((ei3d;fyRL),o,txda433xt,..)iy3xyo4(n--Z(+)1=80003..6xy/0;Math.PI);

0

rotationArbitraryが含まれている場合のみ、任意角度の回転が可能です。

IIIF Image Viewerでの表示

画像サーバーが回転に対応していない場合でも、IIIF Image Viewerを使用することで、クライアント側で回転補正された画像を確認できます。このビューアはブラウザ上で画像を回転させるため、サーバー側の回転機能に依存しません。

URLパラメータ

パラメータ説明
iiifIIIF Image APIのinfo.json URLhttps://example.org/iiif/image/info.json
xywh切り出し領域(x,y,width,height)8843,18773,320,365
rotation回転角度(度)160

使用例

サンプル画像を開く

アノテーション作成のベストプラクティス

1. 頂点順序を守る

必ず「左上→左下→右下→右上」の順序で頂点を指定してください。この順序が崩れると、傾き計算が正しく行われません。

2. 文字の向きを意識する

文字の読み方向(上辺)が「左上→右上」の線になるようにアノテーションを作成します。

3. 適度な余白を含める

文字がちょうど収まる領域ではなく、少し余白を含めた方が視認性が向上します。

技術的な背景

なぜFragmentSelectorとSvgSelectorの両方が必要か

  • FragmentSelector : IIIF Image APIで画像を切り出すための境界ボックス(xywh)
  • SvgSelector : 傾き計算のための正確な頂点座標

FragmentSelectorだけでは傾き情報が失われ、SvgSelectorだけでは境界ボックスの計算が必要になります。両方を保持することで、効率的な処理が可能になります。

IIIF Image APIの回転について

IIIF Image APIの回転パラメータは:

  • 時計回りが正の値
  • 0〜360の範囲
  • 小数点も使用可能

回転後の画像は、元の矩形より大きくなることがあります。これは、回転した矩形を包含する最小の軸平行矩形が返されるためです。

関連リソース