python线条颜色不同_python-Matplotlib:用不同的颜色绘制许多断开的线段

这篇博客对比了Python中几种2D渲染引擎的性能,包括PyGTK2、PyQt5、PyQt4、Cairo和PIL,在渲染线条和开启/关闭抗锯齿的情况下进行基准测试。结果显示,PyGTK2在无抗锯齿情况下表现最佳,达到约2500FPS,而开启抗锯齿后,PyQt5和PyQt4分别降至350和380FPS。Cairo在开启抗锯齿后速度大幅下降至250FPS。
摘要由CSDN通过智能技术生成

我在Python 3上尝试了很多可用的2D渲染引擎,同时为面向图像的Deep Learning&GAN的输出阶段寻找快速解决方案。

使用以下基准测试:在有和没有抗锯齿的情况下,将99行渲染为256x256屏外图像(或更有效的效果)的时间。

结果以旧版x301笔记本电脑上的效率为顺序:

PyGtk2:〜2500 FPS(Python 2,GTK 2,不确定如何获取AA)

PyQt5:〜1200 FPS,使用抗锯齿约为350

PyQt4:约1100 FPS,约380 AA

开罗:〜750 FPS,使用AA时约为250(使用“ FAST” AA时速度稍快)

PIL:〜600 FPS

基线是一个循环,大约需要0.1毫秒(10,000 FPS)来检索随机数并调用原语。

PyGtk2的基本代码:

from gtk import gdk

import random

WIDTH = 256

def r255(): return int(256.0*random.random())

cmap = gdk.Colormap(gdk.visual_get_best_with_depth(24), True)

black = cmap.alloc_color('black')

white = cmap.alloc_color('white')

pixmap = gdk.Pixmap(None, WIDTH, WIDTH, 24)

pixmap.set_colormap(cmap)

gc = pixmap.new_gc(black, line_width=2)

pixmap.draw_rectangle(gc, True, -1, -1, WIDTH+2, WIDTH+2);

gc.set_foreground(white)

for n in range(99):

pixmap.draw_line(gc, r255(), r255(), r255(), r255())

gdk.Pixbuf(gdk.COLORSPACE_RGB, False, 8, WIDTH, WIDTH

).get_from_drawable(pixmap, cmap, 0,0, 0,0, WIDTH, WIDTH

).save('Gdk2-lines.png','png')

这是针对PyQt5的:

from PyQt5.QtCore import Qt

from PyQt5.QtGui import *

import random

WIDTH = 256.0

def r255(): return WIDTH*random.random()

image = QImage(WIDTH, WIDTH, QImage.Format_RGB16)

painter = QPainter()

image.fill(Qt.black)

painter.begin(image)

painter.setPen(QPen(Qt.white, 2))

#painter.setRenderHint(QPainter.Antialiasing)

for n in range(99):

painter.drawLine(WIDTH*r0to1(),WIDTH*r0to1(),WIDTH*r0to1(),WIDTH*r0to1())

painter.end()

image.save('Qt5-lines.png', 'png')

以下是Python3-Cairo的完整性:

import cairo

from random import random as r0to1

WIDTH, HEIGHT = 256, 256

surface = cairo.ImageSurface(cairo.FORMAT_A8, WIDTH, HEIGHT)

ctx = cairo.Context(surface)

ctx.scale(WIDTH, HEIGHT) # Normalizing the canvas

ctx.set_line_width(0.01)

ctx.set_source_rgb(1.0, 1.0, 1.0)

ctx.set_antialias(cairo.ANTIALIAS_NONE)

#ctx.set_antialias(cairo.ANTIALIAS_FAST)

ctx.set_operator(cairo.OPERATOR_CLEAR)

ctx.paint()

ctx.set_operator(cairo.OPERATOR_SOURCE)

for n in range(99):

ctx.move_to(r0to1(), r0to1())

ctx.line_to(r0to1(), r0to1())

ctx.stroke()

surface.write_to_png('Cairo-lines.png')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值