【问题标题】:How to paste images along a circular path in Python?如何在 Python 中沿圆形路径粘贴图像?
【发布时间】:2021-08-01 16:18:45
【问题描述】:

简介

我正在尝试用 Python 重新创建 Twitter 交互圈。但是,我被困在图像的创建上。

到目前为止,我已经能够对方形头像进行圆形裁剪并将它们放置在使用 Pillow 创建的空白图像的中心。

如何将这些图像以圆形方式围绕中心图像放置?

如果能提供任何帮助,我将不胜感激。我是图像处理方面的初学者。

示例图片

我使用 Pillow 能够实现的目标:

【问题讨论】:

  • 欢迎来到 SO。圆形图案意味着将图像放置在一个圆圈中。找到最佳半径并将每个图像沿圆的周边展开。如果您需要多个级别,请以不同的半径重复此操作。
  • 它需要math 来计算半径为Rangel 的圆上的位置 - 比如x = R * sin(angle) + center_xy = R * cos(angle) + center_y。顶部有角度0,底部有角度180,左/右有角度90/270(或270/90)。你必须记住 Python 在 math.sin() 中使用 radians,math.cos()` 所以你需要 sin(math.radians(180))

标签: python python-3.x image-processing python-imaging-library


【解决方案1】:

计算位置需要相当基本的数学(圆的数学公式)。

如果你有半径为R的圆,你必须输入角度angle

  x = R * cos(angle) + center_x
  y = R * sin(angle) + center_y 

Top 有角度0bottom 有角度180left/right 有角度90/270(或270/90)。 p>

您必须记住,Python 在math.sin()math.cos() 中使用radians 而不是degrees,因此您需要math.sin(math.radians(180)) 来计算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 

【讨论】:

  • 我想用枕头创建一些代码,但我没有时间(和图像)
  • 无论如何...非常感谢!!我想到了!它的工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多