From d19b058541e5b4d4549d9f44b7c5bbf99c24fd83 Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 8 Jan 2025 10:56:48 +0000 Subject: [PATCH] fix micropython image night mode --- _posts/2024-09-09-micropython-simulator.md | 5 ++-- .../micropython/convert_to_transparent.py | 28 ++++++++++++++++++ .../simulated_display_transparent.png | Bin 0 -> 18394 bytes 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 assets/blog/micropython/convert_to_transparent.py create mode 100644 assets/blog/micropython/simulated_display_transparent.png diff --git a/_posts/2024-09-09-micropython-simulator.md b/_posts/2024-09-09-micropython-simulator.md index 8a7a77b..1b8394e 100644 --- a/_posts/2024-09-09-micropython-simulator.md +++ b/_posts/2024-09-09-micropython-simulator.md @@ -3,8 +3,9 @@ title: MicroPython Simulator layout: post excerpt: A simulator for my USB C Power supply project using Micropython running in websassembly. -image: /assets/blog/micropython/simulated_display.png -thumbnail: /assets/blog/micropython/simulated_display.png +image: /assets/blog/micropython/simulated_display_transparent.png +thumbnail: /assets/blog/micropython/simulated_display_transparent.png +social_image: /assets/blog/micropython/simulated_display.png assets: /assets/blog/micropython alt: A 240x240 pixel (so low res) image of a slightly sci-fiesque looking circular display showing so linear and curved bars, 24.4 volts, in bigger font 213w and 8.7A. image_class: invertable diff --git a/assets/blog/micropython/convert_to_transparent.py b/assets/blog/micropython/convert_to_transparent.py new file mode 100644 index 0000000..763e856 --- /dev/null +++ b/assets/blog/micropython/convert_to_transparent.py @@ -0,0 +1,28 @@ +import numpy as np +from PIL import Image + + +def convert_image(input_path, output_path): + # Open the image + grey = np.array(Image.open(input_path).convert("L")) + alpha_channel = 255 - grey + + rgba_array = np.zeros((grey.shape[0], grey.shape[1], 4), dtype=np.uint8) + rgba_array[..., 0] = 0 # Red channel + rgba_array[..., 1] = 0 # Green channel + rgba_array[..., 2] = 0 # Blue channel + rgba_array[..., 3] = alpha_channel # Alpha channel + + # Create a new image for the output + rgba_img = Image.fromarray(rgba_array, mode="RGBA") + + + + # Save the result + rgba_img.save(output_path, "PNG") + print(f"Image saved to {output_path}") + +# Example usage +input_file = "simulated_display.png" +output_file = "simulated_display_transparent.png" +convert_image(input_file, output_file) \ No newline at end of file diff --git a/assets/blog/micropython/simulated_display_transparent.png b/assets/blog/micropython/simulated_display_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..561a46556feb451309bff3b6ecc2f6da175527a0 GIT binary patch literal 18394 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 Af&c&j literal 0 HcmV?d00001