From 328e1887e4fe532ee67f86d5e7bd7fa6501a924d Mon Sep 17 00:00:00 2001 From: Matteo Benedetto Date: Sat, 15 Feb 2025 16:43:28 +0100 Subject: [PATCH] Aggiungi il supporto per la creazione di ombre in base ai canali alfa delle immagini --- enne2engine/sdl2_wrapper.py | 24 -------------- fg.png | Bin 0 -> 33756 bytes final_image.png | Bin 0 -> 36543 bytes shadow.py | 62 ++++++++++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 fg.png create mode 100644 final_image.png create mode 100644 shadow.py diff --git a/enne2engine/sdl2_wrapper.py b/enne2engine/sdl2_wrapper.py index cf9a2a4..05e1c47 100644 --- a/enne2engine/sdl2_wrapper.py +++ b/enne2engine/sdl2_wrapper.py @@ -70,30 +70,6 @@ class SDL2Wrapper(IsometricGeometry, SDL2Gui): dstrect=(x, y, srcrect[2], srcrect[3]), srcrect=srcrect) return (frame + 1) % total_frames - def make_non_transparent_pixels_black(self, surface): - width = surface.w - height = surface.h - - # Blocca la surface per l'accesso diretto ai pixel - sdl2.SDL_LockSurface(surface) - - # Itera attraverso i pixel e modifica quelli non trasparenti - u32_pixels = ctypes.cast(surface.pixels, ctypes.POINTER(ctypes.c_uint32)) - for y in range(height): - for x in range(width): - pixel = u32_pixels[y * width + x] - if pixel & 0xFF000000 != 0: - u32_pixels[y * width + x] = 0xFF000000 - # Sblocca la surface - sdl2.SDL_UnlockSurface(surface) - - # Crea una nuova texture dalla surface modificata - new_texture = self.factory.from_surface(surface) - - # Libera la surface temporanea - sdl2.SDL_FreeSurface(surface) - - return new_texture def create_background(self, map, spritesheet_name): self.surface_width = round(self.cell_size * len(map[0]) * math.sqrt(2)) diff --git a/fg.png b/fg.png new file mode 100644 index 0000000000000000000000000000000000000000..42f333f0d34f7fdd5ae171215bb2ddac95cbe53f GIT binary patch literal 33756 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 MG(DDc^m54m0cPThx&QzG literal 0 HcmV?d00001 diff --git a/final_image.png b/final_image.png new file mode 100644 index 0000000000000000000000000000000000000000..71ca6eb75c184919f5e39556adc7aa1e010f63fa GIT binary patch literal 36543 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 z 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 s4RBnl8XkiGbClfwe$)TV6h($ literal 0 HcmV?d00001 diff --git a/shadow.py b/shadow.py new file mode 100644 index 0000000..f19ad05 --- /dev/null +++ b/shadow.py @@ -0,0 +1,62 @@ +from PIL import ImageOps, Image, ImageFilter + +FG_IMG_PATH = "fg.png" + +BG_IMG_PATH = "bg.jpeg" + +def load_image(path): + + """Load an image using PIL.""" + + return Image.open(path) + +def extract_alpha(image): + + """Extract the alpha channel from an image.""" + + return image.split()[-1] + +def create_shadow_from_alpha(alpha, blur_radius): + + """Create a shadow based on a blurred version of the alpha channel.""" + + alpha_blur = alpha.filter(ImageFilter.BoxBlur(blur_radius)) + + shadow = Image.new(mode="RGB", size=alpha_blur.size) + + shadow.putalpha(alpha_blur) + + return shadow + +def composite_images(fg, shadow): + + """Composite the shadow and foreground onto the background.""" + + shadow.paste(fg, (-5, 4), fg) + + return shadow + +if __name__ == "__main__": + + + # Load the images + + fg = load_image(FG_IMG_PATH) + + # Create the shadow based on the alpha channel of the foreground + + alpha = extract_alpha(fg) + + shadow = create_shadow_from_alpha(alpha, blur_radius=1) + + # Composite the shadow and foreground onto the background + + final_image = composite_images(fg, shadow) + + # Display the final image (optional) + + final_image.show() + + # Save the final image + + final_image.save(f"final_image.png") \ No newline at end of file