背景与效果
所谓的像素图,就是对图像做一个颗粒化的处理,使其产生一种妙不可言的朦胧感。直接看一张对比图,感受一下这种视觉变化。
![]()

怎么样,效果还不错吧?现在,我们用 Python 来实现这种像素化的效果。
开发环境
- 操作系统:Windows
- Python 版本:3.7.3
- 核心库:Pillow, NumPy
实现思路
一个最简单的实现思路,是在打开图片后,把图片分割成若干像素块,再对这些像素块中的图像信息进行处理(修改图像中的 RGB 值)即可。
这里我们使用 Numpy 库和 PIL 库来实现这个需求,后者用来图像的读取与保存,涉及到的所有图像处理动作均借助 Numpy 来实现。
有关 NumPy 模块、PIL 模块的介绍,可参考官方文档。PIL(Python Imaging Library)是 Python 常用的图像处理库,而 Pillow 是 PIL 的一个友好分支,提供了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。
代码实战
准备好环境后,我们直接上代码。这段逻辑的核心在于将图像数组分块,计算每个块的平均颜色,然后回填。
from PIL import Image
import numpy as np
def pixelate_image(image_path, output_path, block_size=10):
# 读取图片并转换为 RGB 模式
img = Image.open(image_path).convert('RGB')
width, height = img.size
# 将图片数据转换为 Numpy 数组
img_array = np.array(img)
# 计算需要处理的行数和列数
rows = height // block_size
cols = width // block_size
# 创建一个新的数组用于存储结果
result_array = np.zeros_like(img_array)
print(f"开始处理:{width}x{height}, 块大小:{block_size}")
for r in range(rows):
for c in range(cols):
y_start, y_end = r * block_size, (r + ) * block_size
x_start, x_end = c * block_size, (c + ) * block_size
block = img_array[y_start:y_end, x_start:x_end]
mean_color = np.mean(block, axis=(, ))
result_array[y_start:y_end, x_start:x_end] = mean_color
result_img = Image.fromarray(result_array.astype(np.uint8))
result_img.save(output_path)
()
__name__ == :
input_file =
output_file =
:
pixelate_image(input_file, output_file, block_size=)
FileNotFoundError:
()

