comparison 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
comparison
equal deleted inserted replaced
273:1c95010d9d2e 274:2805246064aa
1 #!/usr/bin/env python3
2
3 import requests
4 import sys
5
6 if len(sys.argv) != 2:
7 print('Usage: %s <URL to info.json>' % sys.argv[0])
8 exit(-1)
9
10 r = requests.get(sys.argv[1])
11 r.raise_for_status()
12
13 info = r.json()
14
15 assert(len(info['tiles']) == 1)
16 assert(len(info['tiles'][0]['scaleFactors']) == len(info['sizes']))
17
18 width = None
19 height = None
20 for size in info['sizes']:
21 if (width == None or
22 size['width'] > width):
23 width = size['width']
24 height = size['height']
25
26 tw = info['tiles'][0]['width']
27 th = info['tiles'][0]['height']
28
29 assert(isinstance(width, int))
30 assert(isinstance(height, int))
31 assert(isinstance(tw, int))
32 assert(isinstance(th, int))
33
34 def CeilingDivision(a, b):
35 if a % b == 0:
36 return a // b
37 else:
38 return a // b + 1
39
40 for s in info['tiles'][0]['scaleFactors']:
41 assert(isinstance(s, int))
42
43 countTilesX = CeilingDivision(width, tw * s)
44 countTilesY = CeilingDivision(height, th * s)
45 print(tw * s, th * s, countTilesX, countTilesY)
46
47 for m in range(countTilesY):
48 for n in range(countTilesX):
49
50 # Reference:
51 # https://iiif.io/api/image/3.0/implementation/#3-tile-region-parameter-calculation
52
53 # Calculate region parameters /xr,yr,wr,hr/
54 xr = n * tw * s
55 yr = m * th * s
56 wr = tw * s
57 if (xr + wr > width):
58 wr = width - xr
59 hr = th * s
60 if (yr + hr > height):
61 hr = height - yr
62
63 # Calculate size parameters /ws,hs/
64 ws = tw
65 if (xr + tw*s > width):
66 ws = (width - xr + s - 1) / s # +s-1 in numerator to round up
67 hs = th
68 if (yr + th*s > height):
69 hs = (height - yr + s - 1) / s
70
71 url = '%s/%d,%d,%d,%d/%d,%d/0/default.jpg' % (info['id'], xr, yr, wr, hr, ws, hs)
72 r = requests.get(url)
73
74 if r.status_code == 200:
75 print('SUCCESS: %s' % url)
76 else:
77 print('ERROR: %s' % url)