问题标签 [aggdraw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1738 浏览

python - 出现此错误后如何安装 aggdraw?

我正在尝试安装 aggdraw python 库来创建高质量的图形,但我不断收到此错误:

解决方法是什么?我该如何安装它?

0 投票
1 回答
397 浏览

python - Python `aggdraw` 模块错误(?):可见 alpha 通道

想象一下简单的脚本:

结果: 在此处输入图像描述

(对不起大尺寸,但更清楚)

问题是: 你能看到非黄色和非白色的边缘吗?这是阿尔法通道什么的。

当我尝试仅使用PIL'Draw对象执行此操作时 - 它看起来清晰且良好,但没有抗锯齿。

但是对于aggdraw'Draw对象,它看起来是抗锯齿的,但具有丑陋的肮脏边缘。

我需要具有非标准侧角的多边形。简单的盒子不是我想要的。

请帮我一些好的乐观答案来解决这个问题。

0 投票
1 回答
949 浏览

python - Python PIL:使用 PIL 修改图像,Flush() 不起作用

以上是我正在运行的代码。我使用网络浏览器打开图像,因为 PILshow()似乎不起作用。以上将Background.png原样返回给我。

任何输入都将不胜感激。

0 投票
1 回答
1049 浏览

python - aggdraw 无法加载字体(没有文本渲染器)

我使用这些说明在 OS X 10.8 上安装了aggdraw,使用 Apple 的 Python (2.7.2) 。在此之前,我使用自制软件安装 freetype,并修改了 aggdraw 的 setup.py 以指向我的 freetype 安装(第 32 行)。FREETYPE_ROOT = "/usr/local/Cellar/freetype/2.4.10/"

尽管如此,当我尝试加载字体时,我得到:

test.py 看起来像这样:

为了在 aggdraw 中加载和使用字体,我需要做什么?

0 投票
1 回答
377 浏览

python - 在 Python Aggdraw 中协调容器类型以实现最快的渲染?

原始问题:

我对在 Aggdraw 文档中找不到的 Python Aggdraw 模块有疑问。我正在使用“.polygon”命令在图像对象上渲染多边形并将输入坐标作为其参数。

我的问题是是否有人知道或有经验 xy 坐标可以在哪些类型的序列容器中(列表、元组、生成器、itertools-generator、数组、numpy-array、deque 等),最重要的是哪种输入类型将帮助 Aggdraw 以最快的方式渲染图像?

文档只提到多边形方法采用:“A Python sequence (x, y, x, y, ...)”

我认为 Aggdraw 针对某些序列类型比其他类型更优化,和/或某些序列类型必须首先转换,因此某些类型会比其他类型更快。所以也许有人知道关于 Aggdraw 内部运作的这些细节,无论是理论上还是经验上?

我已经做了一些初步测试,并且很快会做更多,但我仍然想知道为什么一个选项可能更快的背后的理论,因为这可能是我没有正确地进行测试或者还有一些其他方法可以优化 Aggdraw我不知道的渲染。

(顺便说一句,这似乎是微不足道的优化,但当目标是能够快速渲染数以万计的多边形并能够放大和缩小它们时却不是这样。所以对于这个问题,我不想要其他渲染模块的建议(从我的测试来看,Aggdraw 似乎是最快的之一)。我也知道还有其他优化瓶颈,如坐标到像素转换等,但现在我只关注 Aggdraw 内部渲染速度的最后一步。)

非常感谢,很想知道其他人对 Aggdraw 有什么知识和经验。


赢家?一些初步测试

我现在已经进行了一些初步测试,如果您需要详细信息,我会在页面下方的答案中报告结果。主要发现是,将浮点坐标四舍五入到像素坐标作为整数并将它们放在数组中是使 Aggdraw 渲染图像或地图的最快方法,并以可以比较的速度在 650% 的范围内实现令人难以置信的快速渲染加速使用知名且常用的 GIS 软件。剩下的就是找到优化坐标转换和 shapefile 加载的快速方法,这些确实是一项艰巨的任务。对于所有发现,请查看页面下方的我的答案帖子。

我仍然很想知道您是否自己做过任何测试,或者您是否有其他有用的答案或意见。如果有人知道,我仍然对奖金问题的答案感到好奇。


奖金问题:

如果您不知道这个问题的具体答案,如果您知道实际的 Aggdraw 渲染是用哪种编程语言完成的,它可能仍然会有所帮助?我读过 Aggdraw 模块只是原始 C++ Anti-Grain Geometry 库的 Python 绑定,但不完全确定这实际上意味着什么。这是否意味着 Aggdraw Python 命令只是“在幕后”访问和激活 c++ 库的一种方式,以便实际渲染以 C++ 和 C++ 速度完成?如果是这样,那么我猜 C++ 将不得不将 Python 序列转换为 C++ 序列,并且优化将找出哪个 Python 序列可以最快地转换为 C++ 序列。还是 Aggdraw 模块只是用纯 Python 重写的原始库(因此比 C++ 版本慢得多)?如果是这样,它支持哪些 Python 类型,并且对于它必须执行的渲染工作类型来说,哪种更快。enter code here

0 投票
2 回答
2254 浏览

c++ - 为 Python 3 和 Python 2 编写包装器

在 Python 中,如果旨在使其与 Py3 和 Py2 兼容,那么为 c++ 库编写 Python 包装器的方式有什么不同吗?

或者最初为 Py2 编写的包装器是否应该以与 Py3 相同的方式工作,反之亦然?据我了解,Python 包装器是用 C++ 编写的 .cxx 文件,然后必须对其进行编译。

细节

我问是因为我想安装 Aggdraw(c++ Anti Grain Geometry 绘图库的包装器),它在 Python 2.6-7 中工作,但在 Python 3.4(Windows 7 32 位,通过“PATH=C:/ Python27[或 Python34]”和“python setup.py install”在命令行中)。我希望为 Python 3 重振这个令人惊叹的包装模块,并希望这里的其他人能有兴趣提供帮助。

我可以在 Python 2.6 和 2.7 上毫无问题地编译它,而且我同时拥有 Visual C++ 2008 和 2010,所以这不是编译器问题。问题似乎出在实际的 .cxx 包装代码中。

会不会是 Aggdraw 包装器只考虑了 Python 2x(现在差不多 10 年前)编写了,所以它没有考虑 Python 3x 中可能出现的问题?我最好的猜测是,由于 3.4 版中已弃用和更改的功能,包装器无法将某些 c++ 对象/类型转换为 Python。

我可能愿意通过 .cxx 包装代码来更改必要的部分,如果有人可以帮助我确定故障部分是什么(请参阅下面的命令行错误代码)?如果我们修复了它,那么我将使用指向“恢复的”包装代码的链接来更新这篇文章。

如果 Python 2 和 3 包装器之间不应该有区别,知道为什么我在 Py3 中得到下面的错误代码而不是 Py2 吗?

谢谢!

原始包装代码:点击这里

0 投票
0 回答
527 浏览

python - Installing Aggdraw with Freetype support

I'm trying to compile the Aggdraw drawing module for Python 2,7 with Freetype text rendering support in Windows. Problem is, even though I'm doing everything by the book I still get the error message that there is no font renderer:

I've read previous posts about it, so did these steps:

  1. Downloaded precompiled version of Freetype 2.3.5
  2. Pointed the FREETYPE_ROOT variable in the setup.py script to the freetype folder path ("C:/.../Desktop/freetype-2.3.5")
  3. Installed aggdraw by typing cd path/to/folder/of/setup.py, and then python setup.py install

The setup script seems to accept the freetype location I give it and does not complain about freetype being disabled, so I would've thought that Aggdraw Freetype support got installed.

I've tried the same on a Mac, using the 64-bit version of Aggdraw, compiled Freetype, compiled Aggdraw with link to Freetype, yet still won't let me draw text.

Here is the code I use to test the text rendering, though that shouldnt be the problem:

What am I doing wrong? Why would it let me compile with a link to Freetype, yet still complain about no font renderer?

Thanks!

0 投票
2 回答
2802 浏览

python - 如何使用 Python 2.7 安装 aggdraw

我想在 Python 2.7 中使用 aggdraw。(这是一个愚蠢的想法吗?我看过一个不错的 aggdraw 示例,但我不想回归到 Python 2.6。是否有与 Python 2.7 一起使用的等效绘图库?)我安装了 Python 2.7.8 64bit Windows 7 企业版 SP 1 64 位。

http://www.effbot.org/downloads#aggdraw上的安装程序抱怨缺少 Python 2.6,并python setup.py install抱怨缺少vcvarsall.bat.

因此,按照此处的所有相关帖子,我从http://www.microsoft.com/en-us/download/details.aspx?id=44266安装了 MS 编译器。它在“程序和功能”列表中可见,我现在有一个vcvarsall.batC:\Users\d031475\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0

尽管如此,python setup.py install既不是直接在 CMD 中运行,也不是MS Visual... Compiler for Python 2.7在我的开始菜单中出现的命令提示符中运行。它仍然抱怨缺少vcvarsall.bat.

编辑:即使我将相关目录附加到我的路径,以便我可以从命令行运行vcvarsall.batpython setup.py install仍然抱怨它找不到它。这有多奇怪?

0 投票
0 回答
456 浏览

python - 如何使用 aggdraw 或 PySDL2 创建圆形渐变?

一般问题

我需要创建一个任意半径的圆形渐变并将其映射到当前鼠标位置。该项目主要使用OpenGLPySDL2,但由于遗留原因,也使用aggdraw(使用Pillow包装 PIL)。从广义上讲,SDL2 运行与 OpenGL 和大多数 UI 内容的交互,但 aggdraw 可以预见的是绘图。

我写了一个非常基本的函数。它的工作原理是鼠标运动和渐变绘制之间的延迟随着渐变半径而显着增长(请参阅我的代码;原因很明显)。

下面的代码使用了 aggdraw;aggdraw 对象在其他地方被转换为带有numpy的字节数组以传递给 OpenGL。

我对使用 SDL2 绘图库的解决方案持开放态度,但我从未使用过它,并且希望能像对待此类解决方案一样对待我。;)


特定上下文的注释

由于我提供的代码非常稀疏,出于礼貌,我应该提到这个接口与我已经编写了大约 1 年(KLIBS)的大型模块。所述模块在这里主要做了很多无关紧要的事情,但是,下面的函数确实插入了很多内部代码。唉,我还没有为模块编写文档,因为它(当前)是针对本地上下文的。

然而,这个函数我的代码;并且库的其余部分已经过很好的测试;与其他任何事情相比,开销小于 10 毫秒。

我认为必须有可能比屏幕刷新率更快地做到这一点,延迟 容忍度约为 30 毫秒(项目的背景是视觉认知科学的研究生工作)。我知道这也取决于硬件;一般来说,我们谈论的是不超过 3 年的 iMac。

我确信这可以做得更好,但我已经超出了我的深度;我通常使用网络语言(javascript/PHP/html/css)!

0 投票
0 回答
380 浏览

python - 编写算法以在 Python 中使用没有自相交的 aggdraw 绘制半随机“涂鸦”

我正在为认知心理学写一个实验。我需要生成对一些属性进行任意控制的类似涂鸦的图形。

  • 图形永远不会自相交
  • 它必须关闭
  • 它必须占据大部分绘图表面/画布
  • 我必须能够将其导出为一系列点

此外,我需要在一定程度上控制它的复杂性。

到目前为止,我的一般方法是这样做:

  1. 将画布分成象限并沿每个轴生成交点。这通过确保图形必须进入每个象限来保证图形占据大部分区域。
  2. 我在每个象限中生成随机数量的点。
  3. 我随机选择一条线或一条曲线并按顺序连接每个点

这行得通,但是,它对自相交的控制为零,而且我已经知道我可能对此进行控制的方法是愚蠢的、蛮力的方法。我已经包含了代码,但是对于 SO 来说有点冗长。此外,我绝不会特别关注这个一般过程,这只是我自己能够梦想的。欢迎对我的逻辑提出任何建议/策略/批评。