Mercurial > hg > orthanc-wsi
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) |