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")