如何使用matplotlib绘制具有径向对称性的圆形图像
对称圆形图像Python实现方案
可以通过Pillow + numpy组合实现,核心思路是先生成四分之一区域的基础图案,再通过对称翻转拼接得到完整对称效果,最后叠加圆形蒙版裁剪即可,整体代码非常简洁。
依赖安装
先安装需要的第三方库:
pip install pillow numpy
完整实现代码
from PIL import Image, ImageDraw import numpy as np # 基础参数配置 circle_radius = 300 canvas_size = circle_radius * 2 # 1. 生成第一象限四分之一区域的基础图案 quarter_size = circle_radius quarter_canvas = Image.new("RGBA", (quarter_size, quarter_size), (255,255,255,0)) draw = ImageDraw.Draw(quarter_canvas) # 这里可自定义替换为你需要的基础图案,示例为随机生成色块 for _ in range(8): point1 = np.random.randint(0, quarter_size, 2) point2 = np.random.randint(point1, quarter_size, 2) random_color = tuple(np.random.randint(0, 256, 3)) + (255,) draw.ellipse([*point1, *point2], fill=random_color) # 2. 对称翻转拼接为完整正方形图案 quarter_arr = np.array(quarter_canvas) # 水平翻转得到第二象限 second_quadrant_arr = np.fliplr(quarter_arr) # 拼接得到上半部分两个象限的内容 top_half_arr = np.hstack([second_quadrant_arr, quarter_arr]) # 垂直翻转上半部分得到下半部分两个象限的内容 bottom_half_arr = np.flipud(top_half_arr) # 拼接得到完整正方形图案 full_canvas_arr = np.vstack([top_half_arr, bottom_half_arr]) # 3. 叠加圆形蒙版裁剪为圆形 full_img = Image.fromarray(full_canvas_arr) circle_mask = Image.new("L", (canvas_size, canvas_size), 0) mask_draw = ImageDraw.Draw(circle_mask) mask_draw.ellipse((0, 0, canvas_size, canvas_size), fill=255) full_img.putalpha(circle_mask) # 结果输出 full_img.save("symmetric_circle.png") full_img.show()
自定义调整说明
- 若需要其他对称规则,修改翻转拼接逻辑即可:比如要中心对称,仅需将四分之一图案旋转180度拼接即可,不需要两次翻转
- 四分之一区域的基础图案可以替换为任意自定义内容,包括线条、渐变、文字、导入的外部图片裁切结果等
- 不需要透明背景的话,把所有
RGBA模式改为RGB,删除alpha通道相关的蒙版设置即可
内容的提问来源于stack exchange,提问作者haben
相关产品推荐
相关产品推荐

