python - 如何在 Python 中沿圆形路径粘贴图像?
问题描述
介绍
我正在尝试用 Python 重新创建 Twitter 交互圈。但是,我被困在图像的创建上。
到目前为止,我已经能够对方形头像进行圆形裁剪并将它们放置在使用 Pillow 创建的空白图像的中心。
如何将这些图像以圆形方式围绕中心图像放置?
我将不胜感激任何帮助。我是图像处理的初学者。
示例图像
我已经能够使用枕头实现:
解决方案
它需要相当基本的数学(圆的数学公式)来计算位置。
如果你有半径的圆R
,你必须放入角度angle
x = R * cos(angle) + center_x
y = R * sin(angle) + center_y
Top
有角0
,bottom
有角180
,left
/right
有角90
/ 270
(或270
/ 90
)。
您必须记住 Python 使用radians
而不是degrees
in math.sin()
,math.cos()
因此您需要math.sin(math.radians(180))
计算 for 180 degrees
。
如果你想把8
图像放在圆圈上,那么你需要360 / 8
给出的角度,45
所以第一张图像可以是角度45 * 1
,第二张45 * 2
等等。
如果你想要偏移5
度数,那么(45 * 1) + 5
,第二个(45 * 2) + 5
等等。
我不确定图像的大小。圆有电路
circuit = 2 * PI * R
所以对于8
图像,每个图像都应该使用diagonal
更小的圆圈
diagonal = circuit / 8
这给出了半径
radius = diagonal / 2
要创建这个圈子,您需要使用图片
width = diagonal
height = diagonal
如果电路上有 8 个图像,则图像之间有 7 个间隙。
如果您想要大小为 5 像素的间隙,那么您可能需要
gap = 5
diagonal = (circuit - 7*gap) / 8
推荐阅读
- dns - DNS SOA 响应:googleDNS 返回无限循环
- php - 我无法在免费托管网站上托管我的 laravel 项目
- apache-spark - 为什么我不能实例化'org.apache.spark.sql.hive.HiveSessionStateBuilder?
- azure-devops - 是否可以在 CICD 中运行桌面应用程序?
- aws-appsync - 如何从 AWS Appsync 中的父调用访问子解析器上的参数
- java - 未使用 log4j.properties 文件中提供的日志模式
- linux - 为什么 date 命令不能识别我的变量?
- google-cloud-platform - 为什么 Spanner 在 LIKE 中使用下划线执行全表扫描,而使用 % 则利用索引?
- flutter - 我想通过使用颤振的文本字段将行值添加到数据表中
- php - 无需注册的 Laravel 电子邮件验证