欢迎访问宙启技术站
智能推送

使用ImageDraw绘制马赛克效果的Python编程示例

发布时间:2023-12-26 13:37:34

使用PIL库的ImageDraw模块可以很方便地实现绘制马赛克效果的功能。下面是一个绘制马赛克效果的Python编程示例:

from PIL import Image, ImageDraw

def mosaic(image, block_size):
    # 创建一个新的图像来保存马赛克效果
    mosaic_image = Image.new("RGB", image.size)
    draw = ImageDraw.Draw(mosaic_image)
    width, height = image.size

    # 遍历图像的每个像素块
    for x in range(0, width, block_size):
        for y in range(0, height, block_size):
            # 计算每个像素块的颜色
            block_color = get_block_color(image, x, y, block_size)
            # 在马赛克图像上绘制矩形像素块
            draw.rectangle([(x, y), (x + block_size, y + block_size)], fill=block_color)

    return mosaic_image

def get_block_color(image, x, y, block_size):
    # 计算像素块的颜色
    block_r, block_g, block_b = 0, 0, 0
    count = 0

    # 遍历像素块内的每个像素
    for i in range(x, x + block_size):
        for j in range(y, y + block_size):
            if i < image.width and j < image.height:
                pixel_r, pixel_g, pixel_b = image.getpixel((i, j))
                block_r += pixel_r
                block_g += pixel_g
                block_b += pixel_b
                count += 1

    # 计算像素块的平均颜色
    if count != 0:
        block_r //= count
        block_g //= count
        block_b //= count

    return (block_r, block_g, block_b)

# 加载原始图片
image = Image.open("example.jpg")

# 绘制马赛克效果
mosaic_image = mosaic(image, 10)

# 保存马赛克效果图像
mosaic_image.save("mosaic_example.jpg")

上述代码中的mosaic函数接收一个原始图像和每个像素块的尺寸作为参数,然后创建一个新的图像来保存马赛克效果。接着使用ImageDraw模块的rectangle方法在新图像上绘制矩形像素块,每个像素块的颜色通过get_block_color函数计算得出。get_block_color函数遍历每个像素块内的像素,将各个像素的RGB值相加并除以像素数目得到像素块的平均颜色。

这个示例中使用的原始图片是example.jpg,绘制马赛克效果的每个像素块尺寸为10×10。最终生成的马赛克效果图保存为mosaic_example.jpg

你可以根据自己的需求修改参数,如原始图片、像素块尺寸等,来实现不同的马赛克效果。例子中的像素块大小为10×10,可以根据实际需求进行调整。