large-image-source-openslide 1.32.11__py3-none-any.whl → 1.32.11.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- large_image_source_openslide/__init__.py +4 -32
- {large_image_source_openslide-1.32.11.dist-info → large_image_source_openslide-1.32.11.dev2.dist-info}/METADATA +3 -3
- large_image_source_openslide-1.32.11.dev2.dist-info/RECORD +8 -0
- large_image_source_openslide-1.32.11.dist-info/RECORD +0 -8
- {large_image_source_openslide-1.32.11.dist-info → large_image_source_openslide-1.32.11.dev2.dist-info}/WHEEL +0 -0
- {large_image_source_openslide-1.32.11.dist-info → large_image_source_openslide-1.32.11.dev2.dist-info}/entry_points.txt +0 -0
- {large_image_source_openslide-1.32.11.dist-info → large_image_source_openslide-1.32.11.dev2.dist-info}/licenses/LICENSE +0 -0
- {large_image_source_openslide-1.32.11.dist-info → large_image_source_openslide-1.32.11.dev2.dist-info}/top_level.txt +0 -0
@@ -139,22 +139,19 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
139
139
|
# load an appropriate area and scale it to the tile size later.
|
140
140
|
maxSize = 16384 # This should probably be based on available memory
|
141
141
|
for level in range(self.levels):
|
142
|
-
|
143
|
-
|
144
|
-
levelH = max(1, self.sizeY / levelpow)
|
142
|
+
levelW = max(1, self.sizeX / 2 ** (self.levels - 1 - level))
|
143
|
+
levelH = max(1, self.sizeY / 2 ** (self.levels - 1 - level))
|
145
144
|
# bestlevel and scale will be the picked svs level and the scale
|
146
145
|
# between that level and what we really wanted. We expect scale to
|
147
146
|
# always be a positive integer power of two.
|
148
147
|
bestlevel = svsAvailableLevels[0]['level']
|
149
148
|
scale = 1
|
150
|
-
svsscale = 0
|
151
149
|
for svslevel in range(len(svsAvailableLevels)):
|
152
150
|
if (svsAvailableLevels[svslevel]['width'] < levelW - 1 or
|
153
151
|
svsAvailableLevels[svslevel]['height'] < levelH - 1):
|
154
152
|
break
|
155
153
|
bestlevel = svsAvailableLevels[svslevel]['level']
|
156
154
|
scale = int(round(svsAvailableLevels[svslevel]['width'] / levelW))
|
157
|
-
svsscale = svsAvailableLevels[svslevel].get('downsample', 0)
|
158
155
|
# If there are no tiles at a particular level, we have to read a
|
159
156
|
# larger area of a higher resolution level. If such an area would
|
160
157
|
# be excessively large, we could have memory issues, so raise an
|
@@ -168,7 +165,6 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
168
165
|
self._svslevels.append({
|
169
166
|
'svslevel': bestlevel,
|
170
167
|
'scale': scale,
|
171
|
-
'svsscale': ((svsscale / levelpow) if svsscale else 1) * scale,
|
172
168
|
})
|
173
169
|
self._bounds = None
|
174
170
|
try:
|
@@ -249,7 +245,6 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
249
245
|
"""
|
250
246
|
levels = []
|
251
247
|
svsLevelDimensions = self._openslide.level_dimensions
|
252
|
-
|
253
248
|
for svslevel in range(len(svsLevelDimensions)):
|
254
249
|
try:
|
255
250
|
self._openslide.read_region((0, 0), svslevel, (1, 1))
|
@@ -258,10 +253,6 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
258
253
|
'width': svsLevelDimensions[svslevel][0],
|
259
254
|
'height': svsLevelDimensions[svslevel][1],
|
260
255
|
}
|
261
|
-
try:
|
262
|
-
level['downsample'] = self._openslide.level_downsamples[svslevel]
|
263
|
-
except Exception:
|
264
|
-
pass
|
265
256
|
if level['width'] > 0 and level['height'] > 0:
|
266
257
|
# add to the list so that we can sort by resolution and
|
267
258
|
# then by earlier entries
|
@@ -353,31 +344,12 @@ class OpenslideFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
|
|
353
344
|
tile, format = self._getTileFromEmptyLevel(x, y, z, **kwargs)
|
354
345
|
else:
|
355
346
|
retries = 3
|
356
|
-
svsTileWidth = self.tileWidth * svslevel['scale']
|
357
|
-
svsTileHeight = self.tileHeight * svslevel['scale']
|
358
|
-
# Peculiarly, openslide has a "downsample" factor which isn't the
|
359
|
-
# power of 2 one would expect. This is computed based on the
|
360
|
-
# actual dimensions of levels, but since higher-resolution levels
|
361
|
-
# are not fully populated at the right and bottom, this ends up
|
362
|
-
# with not the actual downsampling, but some slightly higher number
|
363
|
-
# (e.g., 16.0018 rather than 16). Internally, when asking for a
|
364
|
-
# region for anything other than the maximum resolution lever, the
|
365
|
-
# openslide library is passed coordinates in what _seems_ to be
|
366
|
-
# base image coordinates, but is actually inflated by the ratio of
|
367
|
-
# their downsample value and the actual downsample value (e.g.,
|
368
|
-
# 16.0018 / 16). We multiple our values by this ratio so when
|
369
|
-
# openslide misapplies its downsampling we get the region we
|
370
|
-
# actually want
|
371
|
-
if svslevel['svsscale'] != 1:
|
372
|
-
offsetx = int(round(offsetx * svslevel['svsscale']))
|
373
|
-
offsety = int(round(offsety * svslevel['svsscale']))
|
374
|
-
svsTileWidth = int(round(svsTileWidth * svslevel['svsscale']))
|
375
|
-
svsTileHeight = int(round(svsTileHeight * svslevel['svsscale']))
|
376
347
|
while retries > 0:
|
377
348
|
try:
|
378
349
|
tile = self._openslide.read_region(
|
379
350
|
(offsetx, offsety), svslevel['svslevel'],
|
380
|
-
(
|
351
|
+
(self.tileWidth * svslevel['scale'],
|
352
|
+
self.tileHeight * svslevel['scale']))
|
381
353
|
format = TILE_FORMAT_PIL
|
382
354
|
break
|
383
355
|
except openslide.lowlevel.OpenSlideError as exc:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: large-image-source-openslide
|
3
|
-
Version: 1.32.11
|
3
|
+
Version: 1.32.11.dev2
|
4
4
|
Summary: An Openslide tilesource for large_image.
|
5
5
|
Home-page: https://github.com/girder/large_image
|
6
6
|
Author: Kitware, Inc.
|
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
18
18
|
Requires-Python: >=3.8
|
19
19
|
Description-Content-Type: text/x-rst
|
20
20
|
License-File: LICENSE
|
21
|
-
Requires-Dist: large-image>=1.32.11
|
21
|
+
Requires-Dist: large-image>=1.32.11.dev2
|
22
22
|
Requires-Dist: openslide-python>=1.4.1
|
23
23
|
Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "x86_64"
|
24
24
|
Requires-Dist: openslide-bin; platform_system == "Linux" and platform_machine == "aarch64"
|
@@ -27,7 +27,7 @@ Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine =
|
|
27
27
|
Requires-Dist: openslide-bin; platform_system == "Darwin" and platform_machine == "x86_64"
|
28
28
|
Requires-Dist: tifftools>=1.2.0
|
29
29
|
Provides-Extra: girder
|
30
|
-
Requires-Dist: girder-large-image>=1.32.11; extra == "girder"
|
30
|
+
Requires-Dist: girder-large-image>=1.32.11.dev2; extra == "girder"
|
31
31
|
Dynamic: author
|
32
32
|
Dynamic: author-email
|
33
33
|
Dynamic: classifier
|
@@ -0,0 +1,8 @@
|
|
1
|
+
large_image_source_openslide/__init__.py,sha256=hkBSua9o9HbGu_vvGfZfA3PZyJlfmHcJVALhofqr7Do,21117
|
2
|
+
large_image_source_openslide/girder_source.py,sha256=wPa7xBoJ5-PKHMVy9joUNSUHTN6HCZKyR45lhR0SsRc,1236
|
3
|
+
large_image_source_openslide-1.32.11.dev2.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
4
|
+
large_image_source_openslide-1.32.11.dev2.dist-info/METADATA,sha256=-rOlXWS-cWndRKe2at4AzBKYNvII3yGxm1mn1zCHUb8,1800
|
5
|
+
large_image_source_openslide-1.32.11.dev2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
6
|
+
large_image_source_openslide-1.32.11.dev2.dist-info/entry_points.txt,sha256=4Z5cf63yeesvHxiR9W1dY3rfz5_V4Ck2xYhPUp4A1qA,196
|
7
|
+
large_image_source_openslide-1.32.11.dev2.dist-info/top_level.txt,sha256=wqaQQDWQl9a_l9s6n07tTxfjeEXePtHBhz1np6aUwQE,29
|
8
|
+
large_image_source_openslide-1.32.11.dev2.dist-info/RECORD,,
|
@@ -1,8 +0,0 @@
|
|
1
|
-
large_image_source_openslide/__init__.py,sha256=CEfTufsAco3V87GHdRtJz7KbIuLrgu1vGyc5-dtOXd4,22822
|
2
|
-
large_image_source_openslide/girder_source.py,sha256=wPa7xBoJ5-PKHMVy9joUNSUHTN6HCZKyR45lhR0SsRc,1236
|
3
|
-
large_image_source_openslide-1.32.11.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
4
|
-
large_image_source_openslide-1.32.11.dist-info/METADATA,sha256=XdxTllpENmmCeRXTivVzXCqwk6RmMp00LCq9UHvGV_M,1785
|
5
|
-
large_image_source_openslide-1.32.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
6
|
-
large_image_source_openslide-1.32.11.dist-info/entry_points.txt,sha256=4Z5cf63yeesvHxiR9W1dY3rfz5_V4Ck2xYhPUp4A1qA,196
|
7
|
-
large_image_source_openslide-1.32.11.dist-info/top_level.txt,sha256=wqaQQDWQl9a_l9s6n07tTxfjeEXePtHBhz1np6aUwQE,29
|
8
|
-
large_image_source_openslide-1.32.11.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|