def get(self, request, image_id): image_object = get_object_or_404(Image, pk=image_id) if not user_can_download_image(user=request.user, image=image_object): return HttpResponse(status=status.HTTP_403_FORBIDDEN) image_itk = image_object.get_sitk_image() if image_itk is None: return HttpResponse(status=status.HTTP_404_NOT_FOUND) depth = image_itk.GetDepth() image_nparray = SimpleITK.GetArrayFromImage(image_itk) if depth > 0: # Get middle slice of image if 3D image_nparray = image_nparray[depth // 2] image = PILImage.fromarray(image_nparray) image.thumbnail( ( settings.RETINA_DEFAULT_THUMBNAIL_SIZE, settings.RETINA_DEFAULT_THUMBNAIL_SIZE, ), PILImage.ANTIALIAS, ) response = HttpResponse(content_type="image/png") image.save(response, "png") return response
def get(self, request, image_id): image = get_object_or_404(Image, pk=image_id) if not user_can_download_image(user=request.user, image=image): return HttpResponse(status=status.HTTP_403_FORBIDDEN) # This endpoint expects spacing in SimpleITK ordering (x, y, (z)), so reverse image.spacing response_json = json.dumps(list(reversed(image.spacing))) return HttpResponse(response_json, content_type="application/json")
def get_image_itk(image_id, user): image_object = get_object_or_404(Image, pk=image_id) if not user_can_download_image(user=user, image=image_object): raise PermissionDenied image_itk = image_object.get_sitk_image() if image_itk is None: raise Http404 return image_itk
def get(self, request, image_id): image_object = get_object_or_404(Image, pk=image_id) if not user_can_download_image(user=request.user, image=image_object): return HttpResponse(status=status.HTTP_403_FORBIDDEN) image_itk = image_object.get_sitk_image() if image_itk is None: return HttpResponse(status=status.HTTP_404_NOT_FOUND) spacing = image_itk.GetSpacing() return HttpResponse(json.dumps(spacing), content_type="application/json")
def get(self, request, image_id): image_object = get_object_or_404(Image, pk=image_id) if not user_can_download_image(user=request.user, image=image_object): return HttpResponse(status=status.HTTP_403_FORBIDDEN) image_itk = image_object.get_sitk_image() if image_itk is None: return HttpResponse(status=status.HTTP_404_NOT_FOUND) spacing = image_itk.GetSpacing() return HttpResponse( json.dumps(spacing), content_type="application/json" )
def get(self, request, image_id): image_object = get_object_or_404(Image, pk=image_id) if not user_can_download_image(user=request.user, image=image_object): return HttpResponse(status=status.HTTP_403_FORBIDDEN) image_itk = image_object.get_sitk_image() if image_itk is None: return HttpResponse(status=status.HTTP_404_NOT_FOUND) depth = image_itk.GetDepth() image_nparray = sitk.GetArrayFromImage(image_itk) if depth > 0: # Get middle slice of image if 3D image_nparray = image_nparray[depth // 2] image = PILImage.fromarray(image_nparray) image.thumbnail((128, 128), PILImage.ANTIALIAS) response = HttpResponse(content_type="image/png") image.save(response, "png") return response
def serve_images(request, *, pk, path): document_root = safe_join(f"/{settings.IMAGE_FILES_SUBDIRECTORY}", pk) path = posixpath.normpath(path).lstrip("/") name = safe_join(document_root, path) try: image = Image.objects.get(pk=pk) except Image.DoesNotExist: raise Http404("File not found.") try: user, _ = TokenAuthentication().authenticate(request) except (AuthenticationFailed, TypeError): user = request.user if user_can_download_image(user=user, image=image): return protected_storage_redirect(name=name) raise Http404("File not found.")
def get(self, request, image_id): image_object = get_object_or_404(Image, pk=image_id) if not user_can_download_image(user=request.user, image=image_object): return HttpResponse(status=status.HTTP_403_FORBIDDEN) image_itk = image_object.get_sitk_image() if image_itk is None: return HttpResponse(status=status.HTTP_404_NOT_FOUND) npy = sitk.GetArrayFromImage(image_itk) bio = BytesIO() np.save(bio, npy) bio.seek(0) # return numpy array as response response = HttpResponse(bio.getvalue(), content_type="application/octet-stream") bio.close() return response
def get(self, request, image_id): image_object = get_object_or_404(Image, pk=image_id) if not user_can_download_image(user=request.user, image=image_object): return HttpResponse(status=status.HTTP_403_FORBIDDEN) image_itk = image_object.get_sitk_image() if image_itk is None: return HttpResponse(status=status.HTTP_404_NOT_FOUND) npy = sitk.GetArrayFromImage(image_itk) bio = BytesIO() np.save(bio, npy) bio.seek(0) # return numpy array as response response = HttpResponse( bio.getvalue(), content_type="application/octet-stream" ) bio.close() return response
def serve_images(request, *, pk, path): document_root = safe_join(settings.MEDIA_ROOT, "images", pk) path = posixpath.normpath(path).lstrip("/") fullpath = safe_join(document_root, path) try: imagefile = ImageFile.objects.get( file__exact=fullpath[len(settings.MEDIA_ROOT):].lstrip("/")) except ImageFile.DoesNotExist: raise Http404("File not found.") try: user, _ = TokenAuthentication().authenticate(request) except (AuthenticationFailed, TypeError): user = request.user if user_can_download_image(user=user, image=imagefile.image): return serve_fullpath(fullpath=fullpath) raise Http404("File not found.")
def serve_images(request, *, pk, path, pa="", pb=""): document_root = safe_join( f"/{settings.IMAGE_FILES_SUBDIRECTORY}", pa, pb, str(pk) ) path = posixpath.normpath(path).lstrip("/") name = safe_join(document_root, path) try: image = Image.objects.get(pk=pk) except Image.DoesNotExist: raise Http404("Image not found.") try: user, _ = TokenAuthentication().authenticate(request) except (AuthenticationFailed, TypeError): user = request.user if user_can_download_image(user=user, image=image): create_download.apply_async( kwargs={"creator_id": user.pk, "image_id": image.pk} ) return protected_storage_redirect(name=name) raise PermissionDenied
def has_object_permission(self, request, view, obj): return user_can_download_image(user=request.user, image=obj)