使用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,可以根据实际需求进行调整。
