跳至主要內容

如何制作在不同背景下显示不同内容的图片

KSJ大约 2 分钟图像处理

如何制作在不同背景下显示不同内容的图片

有时我们希望一张图片在浅色背景和深色背景下显示不同内容。可以通过像素级处理,将一张输入图片转换为在不同背景下显示不同内容的 PNG。

实现原理

  • 通过分析每个像素的亮度,将图片分为“亮色部分”和“暗色部分”。
  • 亮色像素处理为半透明白色,适合深色背景下突出显示。
  • 暗色像素处理为半透明黑色,适合浅色背景下突出显示。
  • 这样一张图片在不同背景下会呈现不同的视觉效果。
  • 该方法本质上利用了 PNG 的透明通道和人眼对亮度的感知差异。

Python 实现代码

下面的代码以 Pillow 为例,输入一张图片 input.png,输出一张适合不同背景的图片 output.png。思路是:

  • 将图片分为亮色和暗色部分,分别调整透明度。
  • 亮色内容在深色背景下突出,暗色内容在浅色背景下突出。
from PIL import Image

def make_diff_bg_img(input_path, output_path, threshold=128):
    """
    输入一张图片,将其处理为在不同背景下显示不同内容的PNG。
    亮色像素变为半透明白色,适合深色背景;
    暗色像素变为半透明黑色,适合浅色背景。
    """
    img = Image.open(input_path).convert('RGBA')
    w, h = img.size
    pixels = img.load()
    for y in range(h):
        for x in range(w):
            r, g, b, a = pixels[x, y]
            gray = int(0.299*r + 0.587*g + 0.114*b)
            if gray > threshold:
                # 亮色像素,变为半透明白色
                pixels[x, y] = (255, 255, 255, int(a*0.7))
            else:
                # 暗色像素,变为半透明黑色
                pixels[x, y] = (0, 0, 0, int(a*0.7))
    img.save(output_path)

# 用法示例
make_diff_bg_img('input.png', 'output.png')
  • input.png 为原始图片,output.png 为处理后图片。
  • 可根据实际需求调整 threshold 和透明度比例。

参考资料