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