Mercurial > hg > orthanc-wsi
annotate Resources/TestIIIFTiles.py @ 320:196d0e18afa0
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 16 Oct 2024 14:58:02 +0200 |
parents | 2805246064aa |
children |
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) |