From 9e0c63729574144ed55af1633883e2496b4dd7aa Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 22 Oct 2024 16:10:31 +0200 Subject: [PATCH 1/7] feat(screenshot): new rpc missing unit tests --- .../rpc/schemas/take_screenshot.json | 7 +++++ src/opengeodeweb_viewer/vtk_protocol.py | 29 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json diff --git a/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json b/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json new file mode 100644 index 0000000..b8866c8 --- /dev/null +++ b/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json @@ -0,0 +1,7 @@ +{ + "rpc": "screenshot", + "type": "object", + "properties": {}, + "required": [], + "additionalProperties": false + } \ No newline at end of file diff --git a/src/opengeodeweb_viewer/vtk_protocol.py b/src/opengeodeweb_viewer/vtk_protocol.py index 98c4e0e..c95cf4b 100644 --- a/src/opengeodeweb_viewer/vtk_protocol.py +++ b/src/opengeodeweb_viewer/vtk_protocol.py @@ -1,10 +1,19 @@ +# Standard library imports import json import os + +# Third party imports +import vtk from vtk.web import protocols as vtk_protocols +from vtkmodules.vtkIOImage import vtkPNGWriter +from vtkmodules.vtkRenderingCore import (vtkWindowToImageFilter) from wslink import register as exportRpc -import vtk + +# Local application imports from .function import validate_schemas + + schemas = os.path.join(os.path.dirname(__file__), "rpc/schemas") with open(os.path.join(schemas, "create_visualization.json"), "r") as file: @@ -35,6 +44,8 @@ set_color_json = json.load(file) with open(os.path.join(schemas, "set_vertex_attribute.json"), "r") as file: set_vertex_attribute_json = json.load(file) +with open(os.path.join(schemas, "take_screenshot.json"), "r") as file: + take_screenshot_json = json.load(file) class VtkView(vtk_protocols.vtkWebProtocol): @@ -271,6 +282,22 @@ def setVertexAttribute(self, params): mapper.SetScalarModeToUsePointFieldData() self.render() + @exportRpc(take_screenshot_json["rpc"]) + def takeScreenshot(self, params): + validate_schemas(params, take_screenshot_json) + print(f"{params=}", flush=True) + renderWindow = self.getView("-1") + w2if = vtkWindowToImageFilter() + w2if.SetInput(renderWindow) + w2if.SetInputBufferTypeToRGB() + w2if.ReadFrontBufferOff() + w2if.Update() + + writer = vtkPNGWriter() + writer.SetFileName(os.path.join(self.DATA_FOLDER_PATH, 'screenshot.png')) + writer.SetInputConnection(w2if.GetOutputPort()) + writer.Write() + def get_data_base(self): return self.getSharedObject("db") From f9a547c0be68b320292c6c1f2f62bcef94d377ee Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Thu, 24 Oct 2024 10:17:12 +0200 Subject: [PATCH 2/7] more options : filename/output_extention/background --- .../rpc/schemas/take_screenshot.json | 26 ++++++++++++++----- src/opengeodeweb_viewer/vtk_protocol.py | 25 +++++++++++++++--- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json b/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json index b8866c8..b663808 100644 --- a/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json +++ b/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json @@ -1,7 +1,21 @@ { - "rpc": "screenshot", - "type": "object", - "properties": {}, - "required": [], - "additionalProperties": false - } \ No newline at end of file + "rpc": "take_screenshot", + "type": "object", + "properties": { + "filename": { + "type": "string" + }, + "output_extension": { + "type": "string" + }, + "include_background": { + "type": "boolean" + } + }, + "required": [ + "filename", + "output_extension", + "include_background" + ], + "additionalProperties": false +} \ No newline at end of file diff --git a/src/opengeodeweb_viewer/vtk_protocol.py b/src/opengeodeweb_viewer/vtk_protocol.py index c95cf4b..be1714a 100644 --- a/src/opengeodeweb_viewer/vtk_protocol.py +++ b/src/opengeodeweb_viewer/vtk_protocol.py @@ -5,7 +5,7 @@ # Third party imports import vtk from vtk.web import protocols as vtk_protocols -from vtkmodules.vtkIOImage import vtkPNGWriter +from vtkmodules.vtkIOImage import vtkPNGWriter, vtkJPEGWriter from vtkmodules.vtkRenderingCore import (vtkWindowToImageFilter) from wslink import register as exportRpc @@ -286,17 +286,34 @@ def setVertexAttribute(self, params): def takeScreenshot(self, params): validate_schemas(params, take_screenshot_json) print(f"{params=}", flush=True) + filename = params["filename"] + output_extension = params["output_extension"] + include_background = params["include_background"] renderWindow = self.getView("-1") + renderer = self.get_renderer() + w2if = vtkWindowToImageFilter() + + if not include_background: + # renderer.SetBackground([255,255,255]) + # renderer.SetLayer(1) + renderWindow.SetAlphaBitPlanes(1) w2if.SetInput(renderWindow) - w2if.SetInputBufferTypeToRGB() + w2if.SetInputBufferTypeToRGBA() w2if.ReadFrontBufferOff() w2if.Update() + renderWindow.SetAlphaBitPlanes(0) + + if output_extension == "png": + writer = vtkPNGWriter() + elif output_extension == "jpg": + writer = vtkJPEGWriter() - writer = vtkPNGWriter() - writer.SetFileName(os.path.join(self.DATA_FOLDER_PATH, 'screenshot.png')) + writer.SetFileName(os.path.join(self.DATA_FOLDER_PATH, filename + '.' + output_extension)) writer.SetInputConnection(w2if.GetOutputPort()) writer.Write() + # renderer.SetLayer(0) + return def get_data_base(self): return self.getSharedObject("db") From 03716512c3f9441f0c21fd81ccbe7c8e3cd9d060 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 29 Oct 2024 10:14:52 +0100 Subject: [PATCH 3/7] update unit tests --- .../rpc/schemas/take_screenshot.json | 6 ++++- src/opengeodeweb_viewer/vtk_protocol.py | 16 ++++++++---- src/tests/conftest.py | 3 ++- src/tests/test_protocol.py | 23 ++++++++++++++++++ src/tests/tests_output/test.jpeg | Bin 10556 -> 10543 bytes 5 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json b/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json index b663808..f292770 100644 --- a/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json +++ b/src/opengeodeweb_viewer/rpc/schemas/take_screenshot.json @@ -6,7 +6,11 @@ "type": "string" }, "output_extension": { - "type": "string" + "type": "string", + "enum": [ + "png", + "jpg" + ] }, "include_background": { "type": "boolean" diff --git a/src/opengeodeweb_viewer/vtk_protocol.py b/src/opengeodeweb_viewer/vtk_protocol.py index be1714a..bab744f 100644 --- a/src/opengeodeweb_viewer/vtk_protocol.py +++ b/src/opengeodeweb_viewer/vtk_protocol.py @@ -295,9 +295,8 @@ def takeScreenshot(self, params): w2if = vtkWindowToImageFilter() if not include_background: - # renderer.SetBackground([255,255,255]) - # renderer.SetLayer(1) renderWindow.SetAlphaBitPlanes(1) + w2if.SetInput(renderWindow) w2if.SetInputBufferTypeToRGBA() w2if.ReadFrontBufferOff() @@ -308,12 +307,19 @@ def takeScreenshot(self, params): writer = vtkPNGWriter() elif output_extension == "jpg": writer = vtkJPEGWriter() + else: + raise Exception("output_extension not supported") - writer.SetFileName(os.path.join(self.DATA_FOLDER_PATH, filename + '.' + output_extension)) + new_filename = filename + '.' + output_extension + file_path = os.path.join(self.DATA_FOLDER_PATH, new_filename) + writer.SetFileName(file_path) writer.SetInputConnection(w2if.GetOutputPort()) writer.Write() - # renderer.SetLayer(0) - return + + with open(file_path, "rb") as file: + file_content = file.read() + + return {"blob": self.addAttachment(file_content)} def get_data_base(self): return self.getSharedObject("db") diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 6ab340b..fb91c46 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -57,7 +57,8 @@ def print_log(self): print(output) def get_response(self): - response = eval(self.ws.recv()) + return self.ws.recv() + response = json.loads(self.ws.recv()) return response def compare_image(self, nb_messages, filename): diff --git a/src/tests/test_protocol.py b/src/tests/test_protocol.py index c2ae3d9..1323058 100644 --- a/src/tests/test_protocol.py +++ b/src/tests/test_protocol.py @@ -103,3 +103,26 @@ def test_set_color(server): server.call("set_color", [{"id": "123456789", "red": 50, "green": 2, "blue": 250}]) assert server.compare_image(3, "set_color.jpeg") == True + + + +def test_take_screenshot(server): + + server.call( + "create_object_pipeline", + [{"id": "123456789", "file_name": "hat.vtp"}], + ) + assert server.compare_image(3, "create_object_pipeline.jpeg") == True + + server.call( + "take_screenshot", + [{"filename": "screenshot", "output_extension": "png", "include_background": False}], + ) + + response1 = server.get_response() + print(f"{response1=}", flush=True) + response2 = server.get_response() + print(f"{response2=}", flush=True) + + blob = response2 + assert type(blob) is bytes diff --git a/src/tests/tests_output/test.jpeg b/src/tests/tests_output/test.jpeg index 3d463c407a15115911883da84eb6aa247d75c645..6b2509f219dee5c4eca6d83f49c57222970133e8 100644 GIT binary patch literal 10543 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 From 0586102a1ac50f2d022098cede23fca786458d96 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 29 Oct 2024 10:48:48 +0100 Subject: [PATCH 4/7] fix get_response for bytes response --- src/tests/conftest.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/tests/conftest.py b/src/tests/conftest.py index fb91c46..78737e1 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -57,9 +57,11 @@ def print_log(self): print(output) def get_response(self): - return self.ws.recv() - response = json.loads(self.ws.recv()) - return response + response = self.ws.recv() + if isinstance(response, bytes): + return response + else: + return eval(response) def compare_image(self, nb_messages, filename): for message in range(nb_messages): From 3bd2b77231e4dccbd13c8de869f5d56a3d7f83a2 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Wed, 30 Oct 2024 17:15:20 +0100 Subject: [PATCH 5/7] fix tests --- src/opengeodeweb_viewer/vtk_protocol.py | 12 +++- src/tests/conftest.py | 36 +++++++---- .../take_screenshot_with_background.jpg | Bin 0 -> 7026 bytes .../take_screenshot_with_background.png | Bin 0 -> 9519 bytes .../take_screenshot_without_background.png | Bin 0 -> 9519 bytes src/tests/test_protocol.py | 60 ++++++++++++++++-- 6 files changed, 85 insertions(+), 23 deletions(-) create mode 100644 src/tests/data/images/take_screenshot_with_background.jpg create mode 100644 src/tests/data/images/take_screenshot_with_background.png create mode 100644 src/tests/data/images/take_screenshot_without_background.png diff --git a/src/opengeodeweb_viewer/vtk_protocol.py b/src/opengeodeweb_viewer/vtk_protocol.py index bab744f..91d9d71 100644 --- a/src/opengeodeweb_viewer/vtk_protocol.py +++ b/src/opengeodeweb_viewer/vtk_protocol.py @@ -296,16 +296,22 @@ def takeScreenshot(self, params): if not include_background: renderWindow.SetAlphaBitPlanes(1) + w2if.SetInputBufferTypeToRGBA() + else: + renderWindow.SetAlphaBitPlanes(0) + w2if.SetInputBufferTypeToRGB() + + renderWindow.Render() w2if.SetInput(renderWindow) - w2if.SetInputBufferTypeToRGBA() w2if.ReadFrontBufferOff() w2if.Update() - renderWindow.SetAlphaBitPlanes(0) if output_extension == "png": writer = vtkPNGWriter() - elif output_extension == "jpg": + elif output_extension in ["jpg", "jpeg"]: + if not include_background: + raise Exception("output_extension not supported with background") writer = vtkJPEGWriter() else: raise Exception("output_extension not supported") diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 78737e1..5b6510e 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -30,8 +30,8 @@ def __init__(self, log): self.call("viewport.image.push.observer.add", [-1]) for i in range(5): print(f"{i=}", flush=True) - reponse = self.ws.recv() - print(f"{reponse=}", flush=True) + response = self.ws.recv() + print(f"{response=}", flush=True) def call(self, rpc, params=[{}]): print(f"{rpc=} {params=}", flush=True) @@ -62,6 +62,26 @@ def get_response(self): return response else: return eval(response) + def images_diff(self, first_image_path, second_image_path): + if ".png" in first_image_path: + first_reader = vtk.vtkPNGReader() + elif (".jpg" in first_image_path) or (".jpeg" in first_image_path): + first_reader = vtk.vtkJPEGReader() + first_reader.SetFileName(first_image_path) + + if ".png" in second_image_path: + second_reader = vtk.vtkPNGReader() + elif (".jpg" in second_image_path) or (".jpeg" in second_image_path): + second_reader = vtk.vtkJPEGReader() + second_reader.SetFileName(second_image_path) + + images_diff = vtk.vtkImageDifference() + images_diff.SetInputConnection(first_reader.GetOutputPort()) + images_diff.SetImageConnection(second_reader.GetOutputPort()) + images_diff.Update() + + print(f"{images_diff.GetThresholdedError()=}") + return images_diff.GetThresholdedError() def compare_image(self, nb_messages, filename): for message in range(nb_messages): @@ -86,20 +106,10 @@ def compare_image(self, nb_messages, filename): f.write(image) f.close() - test_reader = vtk.vtkJPEGReader() - test_reader.SetFileName(test_file_path) - path_image = os.path.join(self.images_dir_path, filename) - answer_reader = vtk.vtkJPEGReader() - answer_reader.SetFileName(path_image) - images_diff = vtk.vtkImageDifference() - images_diff.SetInputConnection(test_reader.GetOutputPort()) - images_diff.SetImageConnection(answer_reader.GetOutputPort()) - images_diff.Update() + return self.images_diff(test_file_path, path_image)==0.0 - print(f"{images_diff.GetThresholdedError()=}") - return images_diff.GetThresholdedError() == 0.0 class FixtureHelper: diff --git a/src/tests/data/images/take_screenshot_with_background.jpg b/src/tests/data/images/take_screenshot_with_background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0faecaf3f394c1e0d90b63462411f315ff48d79b GIT binary patch literal 7026 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 literal 0 HcmV?d00001 diff --git a/src/tests/data/images/take_screenshot_without_background.png b/src/tests/data/images/take_screenshot_without_background.png new file mode 100644 index 0000000000000000000000000000000000000000..4af1e65f1889e1b238fd8d9cd36fc8df237ddb79 GIT binary patch literal 9519 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 literal 0 HcmV?d00001 diff --git a/src/tests/test_protocol.py b/src/tests/test_protocol.py index 1323058..f9f09ee 100644 --- a/src/tests/test_protocol.py +++ b/src/tests/test_protocol.py @@ -107,22 +107,68 @@ def test_set_color(server): def test_take_screenshot(server): - + # Create an object server.call( "create_object_pipeline", [{"id": "123456789", "file_name": "hat.vtp"}], ) assert server.compare_image(3, "create_object_pipeline.jpeg") == True + + # Take a screenshot with background jpg + server.call( + "take_screenshot", + [{"filename": "take_screenshot_with_background", "output_extension": "jpg", "include_background": True}], + ) + + response = server.get_response() + blob = server.get_response() + assert type(blob) is bytes + + with open(os.path.join(server.test_output_dir, "test.jpg"), "wb") as f: + f.write(blob) + f.close() + first_image_path = os.path.join(server.test_output_dir, "test.jpg") + second_image_path = os.path.join(server.images_dir_path, "take_screenshot_with_background.jpg") + + assert server.images_diff(first_image_path, second_image_path) == 0.0 + + # Take a screenshot without background png server.call( "take_screenshot", - [{"filename": "screenshot", "output_extension": "png", "include_background": False}], + [{"filename": "take_screenshot_without_background", "output_extension": "png", "include_background": True}], ) + + response = server.get_response() + response = server.get_response() + blob = server.get_response() + print(f"{blob=}", flush=True) + assert type(blob) is bytes - response1 = server.get_response() - print(f"{response1=}", flush=True) - response2 = server.get_response() - print(f"{response2=}", flush=True) + with open(os.path.join(server.test_output_dir, "test.png"), "wb") as f: + f.write(blob) + f.close() + first_image_path = os.path.join(server.test_output_dir, "test.png") + second_image_path = os.path.join(server.images_dir_path, "take_screenshot_without_background.png") - blob = response2 + assert server.images_diff(first_image_path, second_image_path) == 0.0 + + # Take a screenshot with background png + server.call( + "take_screenshot", + [{"filename": "take_screenshot_with_background", "output_extension": "png", "include_background": True}], + ) + + response = server.get_response() + response = server.get_response() + blob = server.get_response() + print(f"{blob=}", flush=True) assert type(blob) is bytes + + with open(os.path.join(server.test_output_dir, "test.png"), "wb") as f: + f.write(blob) + f.close() + first_image_path = os.path.join(server.test_output_dir, "test.png") + second_image_path = os.path.join(server.images_dir_path, "take_screenshot_with_background.png") + + assert server.images_diff(first_image_path, second_image_path) == 0.0 From becbd80025c6c4ce8a875fc0ac58000314c5b068 Mon Sep 17 00:00:00 2001 From: Julien Champagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:12:29 +0100 Subject: [PATCH 6/7] Update src/tests/conftest.py Co-authored-by: Arnaud Botella --- src/tests/conftest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 5b6510e..7553434 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -62,6 +62,7 @@ def get_response(self): return response else: return eval(response) + def images_diff(self, first_image_path, second_image_path): if ".png" in first_image_path: first_reader = vtk.vtkPNGReader() From 30af72946fc09578d1da0b50441fdf7a647d0627 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 31 Oct 2024 08:17:25 +0000 Subject: [PATCH 7/7] 0.3.0-rc.1 Automatically generated by python-semantic-release --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad65526..189e932 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,34 @@ # CHANGELOG +## v0.3.0-rc.1 (2024-10-31) + +### Features + +* feat(screenshot): new rpc +missing unit tests ([`9e0c637`](https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/commit/9e0c63729574144ed55af1633883e2496b4dd7aa)) + +### Unknown + +* Merge pull request #27 from Geode-solutions/feat/screenshot + +feat(screenshot): new rpc ([`c12723d`](https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/commit/c12723dd8c77cfb2301a106f9948b062ee3e5917)) + +* Update src/tests/conftest.py + +Co-authored-by: Arnaud Botella ([`becbd80`](https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/commit/becbd80025c6c4ce8a875fc0ac58000314c5b068)) + +* fix tests ([`3bd2b77`](https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/commit/3bd2b77231e4dccbd13c8de869f5d56a3d7f83a2)) + +* fix get_response for bytes response ([`0586102`](https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/commit/0586102a1ac50f2d022098cede23fca786458d96)) + +* update unit tests ([`0371651`](https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/commit/03716512c3f9441f0c21fd81ccbe7c8e3cd9d060)) + +* more options : filename/output_extention/background ([`f9a547c`](https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/commit/f9a547c0be68b320292c6c1f2f62bcef94d377ee)) + +* ([`8ef5d85`](https://github.com/Geode-solutions/OpenGeodeWeb-Viewer/commit/8ef5d856295d40b5bc915be59e540e5b36ef6bff)) + + ## v0.2.1 (2024-10-22) ### Unknown diff --git a/pyproject.toml b/pyproject.toml index 8834604..2c1d1f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "OpenGeodeWeb-Viewer" -version = "0.2.1" +version = "0.3.0-rc.1" dynamic = ["dependencies"] authors = [ { name="Geode-solutions", email="team-web@geode-solutions.com" },