large-image-source-openslide 1.27.5.dev4__py3-none-any.whl → 1.30.7.dev10__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- large_image_source_openslide/__init__.py +39 -2
- large_image_source_openslide-1.30.7.dev10.dist-info/METADATA +47 -0
- large_image_source_openslide-1.30.7.dev10.dist-info/RECORD +8 -0
- {large_image_source_openslide-1.27.5.dev4.dist-info → large_image_source_openslide-1.30.7.dev10.dist-info}/WHEEL +1 -1
- large_image_source_openslide-1.27.5.dev4.dist-info/METADATA +0 -28
- large_image_source_openslide-1.27.5.dev4.dist-info/RECORD +0 -8
- {large_image_source_openslide-1.27.5.dev4.dist-info → large_image_source_openslide-1.30.7.dev10.dist-info}/LICENSE +0 -0
- {large_image_source_openslide-1.27.5.dev4.dist-info → large_image_source_openslide-1.30.7.dev10.dist-info}/entry_points.txt +0 -0
- {large_image_source_openslide-1.27.5.dev4.dist-info → large_image_source_openslide-1.30.7.dev10.dist-info}/top_level.txt +0 -0
@@ -47,6 +47,8 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
47
47
|
extensions = {
|
48
48
|
None: SourcePriority.MEDIUM,
|
49
49
|
'bif': SourcePriority.LOW, # Ventana
|
50
|
+
'dcm': SourcePriority.LOW, # DICOM
|
51
|
+
'ini': SourcePriority.LOW, # Part of mrxs
|
50
52
|
'mrxs': SourcePriority.PREFERRED, # MIRAX
|
51
53
|
'ndpi': SourcePriority.PREFERRED, # Hamamatsu
|
52
54
|
'scn': SourcePriority.LOW, # Leica
|
@@ -92,6 +94,13 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
92
94
|
tifftools.Tag.ICCProfile.value]['data']]
|
93
95
|
except Exception:
|
94
96
|
pass
|
97
|
+
if hasattr(self, '_tiffinfo'):
|
98
|
+
for ifd in self._tiffinfo['ifds']:
|
99
|
+
if (tifftools.Tag.NDPI_FOCAL_PLANE.value in ifd['tags'] and
|
100
|
+
ifd['tags'][tifftools.Tag.NDPI_FOCAL_PLANE.value]['data'][0] != 0):
|
101
|
+
msg = ('File will not be opened via OpenSlide; '
|
102
|
+
'non-zero focal planes would be missed.')
|
103
|
+
raise TileSourceError(msg)
|
95
104
|
|
96
105
|
svsAvailableLevels = self._getAvailableLevels(self._largeImagePath)
|
97
106
|
if not len(svsAvailableLevels):
|
@@ -153,6 +162,30 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
153
162
|
'svslevel': bestlevel,
|
154
163
|
'scale': scale,
|
155
164
|
})
|
165
|
+
self._bounds = None
|
166
|
+
try:
|
167
|
+
bounds = {
|
168
|
+
'x': int(self._openslide.properties[openslide.PROPERTY_NAME_BOUNDS_X]),
|
169
|
+
'y': int(self._openslide.properties[openslide.PROPERTY_NAME_BOUNDS_Y]),
|
170
|
+
'width': int(self._openslide.properties[openslide.PROPERTY_NAME_BOUNDS_WIDTH]),
|
171
|
+
'height': int(self._openslide.properties[openslide.PROPERTY_NAME_BOUNDS_HEIGHT]),
|
172
|
+
}
|
173
|
+
if (
|
174
|
+
bounds['x'] >= 0 and bounds['width'] > 0 and
|
175
|
+
bounds['x'] + bounds['width'] <= self.sizeX and
|
176
|
+
bounds['y'] >= 0 and bounds['height'] > 0 and
|
177
|
+
bounds['y'] + bounds['height'] <= self.sizeY and
|
178
|
+
(bounds['width'] < self.sizeX or bounds['height'] < self.sizeY)
|
179
|
+
):
|
180
|
+
self._bounds = bounds
|
181
|
+
self.sizeX, self.sizeY = bounds['width'], bounds['height']
|
182
|
+
prevlevels = self.levels
|
183
|
+
self.levels = int(math.ceil(max(
|
184
|
+
math.log(float(self.sizeX) / self.tileWidth),
|
185
|
+
math.log(float(self.sizeY) / self.tileHeight)) / math.log(2))) + 1
|
186
|
+
self._svslevels = self._svslevels[prevlevels - self.levels:]
|
187
|
+
except Exception:
|
188
|
+
pass
|
156
189
|
self._populatedLevels = len({l['svslevel'] for l in self._svslevels})
|
157
190
|
|
158
191
|
def _getTileSize(self):
|
@@ -291,11 +324,14 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
291
324
|
scale = 2 ** (self.levels - 1 - z)
|
292
325
|
offsetx = x * self.tileWidth * scale
|
293
326
|
offsety = y * self.tileHeight * scale
|
327
|
+
if self._bounds is not None:
|
328
|
+
offsetx += self._bounds['x'] // svslevel['scale']
|
329
|
+
offsety += self._bounds['y'] // svslevel['scale']
|
294
330
|
# We ask to read an area that will cover the tile at the z level. The
|
295
331
|
# scale we computed in the __init__ process for this svs level tells
|
296
332
|
# how much larger a region we need to read.
|
297
333
|
if svslevel['scale'] > 2 ** self._maxSkippedLevels:
|
298
|
-
tile = self._getTileFromEmptyLevel(x, y, z, **kwargs)
|
334
|
+
tile, format = self._getTileFromEmptyLevel(x, y, z, **kwargs)
|
299
335
|
else:
|
300
336
|
retries = 3
|
301
337
|
while retries > 0:
|
@@ -304,6 +340,7 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
304
340
|
(offsetx, offsety), svslevel['svslevel'],
|
305
341
|
(self.tileWidth * svslevel['scale'],
|
306
342
|
self.tileHeight * svslevel['scale']))
|
343
|
+
format = TILE_FORMAT_PIL
|
307
344
|
break
|
308
345
|
except openslide.lowlevel.OpenSlideError as exc:
|
309
346
|
self._largeImagePath = str(self._getLargeImagePath())
|
@@ -323,7 +360,7 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
323
360
|
if svslevel['scale'] != 1:
|
324
361
|
tile = tile.resize((self.tileWidth, self.tileHeight),
|
325
362
|
getattr(PIL.Image, 'Resampling', PIL.Image).LANCZOS)
|
326
|
-
return self._outputTile(tile,
|
363
|
+
return self._outputTile(tile, format, x, y, z, pilImageAllowed,
|
327
364
|
numpyAllowed, **kwargs)
|
328
365
|
|
329
366
|
def getPreferredLevel(self, level):
|
@@ -0,0 +1,47 @@
|
|
1
|
+
Metadata-Version: 2.2
|
2
|
+
Name: large-image-source-openslide
|
3
|
+
Version: 1.30.7.dev10
|
4
|
+
Summary: An Openslide tilesource for large_image.
|
5
|
+
Home-page: https://github.com/girder/large_image
|
6
|
+
Author: Kitware, Inc.
|
7
|
+
Author-email: kitware@kitware.com
|
8
|
+
License: Apache Software License 2.0
|
9
|
+
Keywords: large_image,tile source
|
10
|
+
Classifier: Development Status :: 5 - Production/Stable
|
11
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
13
|
+
Classifier: Programming Language :: Python :: 3.8
|
14
|
+
Classifier: Programming Language :: Python :: 3.9
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
19
|
+
Requires-Python: >=3.8
|
20
|
+
Description-Content-Type: text/x-rst
|
21
|
+
License-File: LICENSE
|
22
|
+
Requires-Dist: large-image>=1.30.7.dev10
|
23
|
+
Requires-Dist: openslide-python>=1.4.1
|
24
|
+
Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "x86_64"
|
25
|
+
Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "aarch64"
|
26
|
+
Requires-Dist: openslide-bin; platform_system == "Windows" and platform_machine == "AMD64"
|
27
|
+
Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine == "arm64"
|
28
|
+
Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine == "x86_64"
|
29
|
+
Requires-Dist: tifftools>=1.2.0
|
30
|
+
Provides-Extra: girder
|
31
|
+
Requires-Dist: girder-large-image>=1.30.7.dev10; extra == "girder"
|
32
|
+
Dynamic: author
|
33
|
+
Dynamic: author-email
|
34
|
+
Dynamic: classifier
|
35
|
+
Dynamic: description
|
36
|
+
Dynamic: description-content-type
|
37
|
+
Dynamic: home-page
|
38
|
+
Dynamic: keywords
|
39
|
+
Dynamic: license
|
40
|
+
Dynamic: provides-extra
|
41
|
+
Dynamic: requires-dist
|
42
|
+
Dynamic: requires-python
|
43
|
+
Dynamic: summary
|
44
|
+
|
45
|
+
An Openslide tilesource for large_image.
|
46
|
+
|
47
|
+
See the large-image package for more details.
|
@@ -0,0 +1,8 @@
|
|
1
|
+
large_image_source_openslide/__init__.py,sha256=O1-E-D7ZdY6Ta_ngId_HV0uqqxAbuY_J9fKTNVOFulE,20495
|
2
|
+
large_image_source_openslide/girder_source.py,sha256=ntLgOinO7xcO85wFbjx6XEBmTgEtx5cuPZ_K6wXZzqA,1199
|
3
|
+
large_image_source_openslide-1.30.7.dev10.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
4
|
+
large_image_source_openslide-1.30.7.dev10.dist-info/METADATA,sha256=cyvU_lZazei0R457AvXB-Kt8Zh2deJVZZ-CITnyHIAY,1858
|
5
|
+
large_image_source_openslide-1.30.7.dev10.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
6
|
+
large_image_source_openslide-1.30.7.dev10.dist-info/entry_points.txt,sha256=4Z5cf63yeesvHxiR9W1dY3rfz5_V4Ck2xYhPUp4A1qA,196
|
7
|
+
large_image_source_openslide-1.30.7.dev10.dist-info/top_level.txt,sha256=wqaQQDWQl9a_l9s6n07tTxfjeEXePtHBhz1np6aUwQE,29
|
8
|
+
large_image_source_openslide-1.30.7.dev10.dist-info/RECORD,,
|
@@ -1,28 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: large-image-source-openslide
|
3
|
-
Version: 1.27.5.dev4
|
4
|
-
Summary: An Openslide tilesource for large_image.
|
5
|
-
Home-page: https://github.com/girder/large_image
|
6
|
-
Author: Kitware, Inc.
|
7
|
-
Author-email: kitware@kitware.com
|
8
|
-
License: Apache Software License 2.0
|
9
|
-
Keywords: large_image,tile source
|
10
|
-
Classifier: Development Status :: 5 - Production/Stable
|
11
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
12
|
-
Classifier: Programming Language :: Python :: 3
|
13
|
-
Classifier: Programming Language :: Python :: 3.8
|
14
|
-
Classifier: Programming Language :: Python :: 3.9
|
15
|
-
Classifier: Programming Language :: Python :: 3.10
|
16
|
-
Classifier: Programming Language :: Python :: 3.11
|
17
|
-
Classifier: Programming Language :: Python :: 3.12
|
18
|
-
Requires-Python: >=3.8
|
19
|
-
License-File: LICENSE
|
20
|
-
Requires-Dist: large-image >=1.27.5.dev4
|
21
|
-
Requires-Dist: openslide-python >=1.1.0
|
22
|
-
Requires-Dist: tifftools >=1.2.0
|
23
|
-
Provides-Extra: girder
|
24
|
-
Requires-Dist: girder-large-image >=1.27.5.dev4 ; extra == 'girder'
|
25
|
-
|
26
|
-
An Openslide tilesource for large_image.
|
27
|
-
|
28
|
-
See the large-image package for more details.
|
@@ -1,8 +0,0 @@
|
|
1
|
-
large_image_source_openslide/__init__.py,sha256=vzEx04RTBTptXUwbEMtcMMqXC2zq8lVtbenxFcdSfI8,18468
|
2
|
-
large_image_source_openslide/girder_source.py,sha256=ntLgOinO7xcO85wFbjx6XEBmTgEtx5cuPZ_K6wXZzqA,1199
|
3
|
-
large_image_source_openslide-1.27.5.dev4.dist-info/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
4
|
-
large_image_source_openslide-1.27.5.dev4.dist-info/METADATA,sha256=jUNpNnImY3TTU26ap-psGbbqWp1Pjz0GQVklx7m-HiI,1063
|
5
|
-
large_image_source_openslide-1.27.5.dev4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
6
|
-
large_image_source_openslide-1.27.5.dev4.dist-info/entry_points.txt,sha256=4Z5cf63yeesvHxiR9W1dY3rfz5_V4Ck2xYhPUp4A1qA,196
|
7
|
-
large_image_source_openslide-1.27.5.dev4.dist-info/top_level.txt,sha256=wqaQQDWQl9a_l9s6n07tTxfjeEXePtHBhz1np6aUwQE,29
|
8
|
-
large_image_source_openslide-1.27.5.dev4.dist-info/RECORD,,
|
File without changes
|
File without changes
|