diff Resources/TestIIIFTiles.py @ 274:2805246064aa iiif

added SetIIIFForcePowersOfTwoScaleFactors()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 12 Jul 2023 11:24:56 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/TestIIIFTiles.py	Wed Jul 12 11:24:56 2023 +0200
@@ -0,0 +1,77 @@
+#!/usr/bin/env python3
+
+import requests
+import sys
+
+if len(sys.argv) != 2:
+    print('Usage: %s <URL to info.json>' % sys.argv[0])
+    exit(-1)
+
+r = requests.get(sys.argv[1])
+r.raise_for_status()
+
+info = r.json()
+
+assert(len(info['tiles']) == 1)
+assert(len(info['tiles'][0]['scaleFactors']) == len(info['sizes']))
+
+width = None
+height = None
+for size in info['sizes']:
+    if (width == None or
+        size['width'] > width):
+        width = size['width']
+        height = size['height']
+
+tw = info['tiles'][0]['width']
+th = info['tiles'][0]['height']
+
+assert(isinstance(width, int))
+assert(isinstance(height, int))
+assert(isinstance(tw, int))
+assert(isinstance(th, int))
+
+def CeilingDivision(a, b):
+    if a % b == 0:
+        return a // b
+    else:
+        return a // b + 1
+
+for s in info['tiles'][0]['scaleFactors']:
+    assert(isinstance(s, int))
+
+    countTilesX = CeilingDivision(width, tw * s)
+    countTilesY = CeilingDivision(height, th * s)
+    print(tw * s, th * s, countTilesX, countTilesY)
+
+    for m in range(countTilesY):
+        for n in range(countTilesX):
+
+            # Reference:
+            # https://iiif.io/api/image/3.0/implementation/#3-tile-region-parameter-calculation
+
+            # Calculate region parameters /xr,yr,wr,hr/
+            xr = n * tw * s
+            yr = m * th * s
+            wr = tw * s
+            if (xr + wr > width):
+                wr = width - xr
+            hr = th * s
+            if (yr + hr > height):
+                hr = height - yr
+
+            # Calculate size parameters /ws,hs/
+            ws = tw
+            if (xr + tw*s > width):
+                ws = (width - xr + s - 1) / s  # +s-1 in numerator to round up
+            hs = th
+            if (yr + th*s > height):
+                hs = (height - yr + s - 1) / s
+
+            url = '%s/%d,%d,%d,%d/%d,%d/0/default.jpg' % (info['id'], xr, yr, wr, hr, ws, hs)
+            r = requests.get(url)
+
+            if r.status_code == 200:
+                print('SUCCESS: %s' % url)
+            else:
+                print('ERROR:   %s' % url)