pyglet.image

子模块

细节

图像加载、捕捉和高级纹理功能。

此处仅介绍基本功能;有关完整参考,请参阅随附的文档。

要加载图像::

from pyglet import image
pic = image.load('picture.png')

受支持的图像文件类型包括PNG、BMP、GIF、JPG等,具体取决于操作系统。要从类文件对象而不是文件名加载图像,请执行以下操作:

pic = image.load('hint.jpg', file=fileobj)

该提示帮助模块根据文件扩展名找到要使用的适当解码器。这是可选的。

一旦加载,图像就可以被大多数其他的Piglet模块直接使用。所有图像都有您可以访问的宽度和高度::

width, height = pic.width, pic.height

您可以提取图像的一个区域(这将保持原始图像不变;有效地共享内存)::

subimage = pic.get_region(x, y, width, height)

记住,y坐标总是向上递增。

绘制图像

要在屏幕上的某个点绘制图像::

pic.blit(x, y, z)

这假设已经应用了适当的视图变换和投影。

一些图像有一个内在的“锚点”:这是一个将对齐到 xy 绘制图像时的坐标。默认情况下,锚点是图像的左下角。您可以使用锚点在给定点居中显示图像,例如:

pic.anchor_x = pic.width // 2
pic.anchor_y = pic.height // 2
pic.blit(x, y, z)

纹理访问

如果您直接使用OpenGL,则可以将图像作为纹理访问:

texture = pic.get_texture()

(这是获取纹理的最有效方法;一些图像立即作为纹理加载,而其他图像则通过中间形式加载)。将纹理与pyglet.gl一起使用::

from pyglet.gl import *
glEnable(texture.target)        # typically target is GL_TEXTURE_2D
glBindTexture(texture.target, texture.id)
# ... draw with the texture

像素访问

要访问图像的原始像素数据::

rawimage = pic.get_image_data()

(如果图像刚刚加载,这将是一个非常快的操作;但是,如果图像是纹理,则将发生相对昂贵的回读操作)。这些像素可以作为字符串访问::

format = 'RGBA'
pitch = rawimage.width * len(format)
pixels = rawimage.get_data(format, pitch)

“格式”字符串由给出每个颜色分量的字节顺序的字符组成。例如,如果rawImage.Format为‘RGBA’,则按顺序有四个颜色分量:红、绿、蓝和阿尔法。其他常见的格式字符串有‘RGB’、‘LA’(亮度、Alpha)和‘I’(强度)。

图像的“间距”是一行中的字节数(这可能有效地大于构成图像宽度所需的数目,这对于字对齐来说是很常见的)。如果“Pitch”为负数,则图像的行将从上到下排序,否则将从下到上排序。

使用中给出的格式和间距检索数据 ImageData.formatImageData.pitch 避免了数据转换的需要(假设您可以使用这种任意格式的数据)。

班级

图片

class AbstractImage(width, height)

表示图像的抽象类。

参数:
width集成

图像的宽度

height集成

图像高度

anchor_x集成

相对于图像数据左边缘的锚点的X坐标

anchor_y集成

相对于图像数据底边的锚点的Y坐标

blit(x, y, z=0)

将此图像绘制到活动帧缓冲区。

该图像将在左下角处绘制 (x - anchor_xy - anchor_yz )。

blit_into(source, x, y, z)

source 在这张图片上。

source 将复制到此图像中,以便其锚点与 xy 参数。如果此图像是3D纹理,则 z 坐标指定要复制到的图像切片。

请注意,如果 source 大于此图像(否则定位会导致副本越界),则必须传递 source 添加到此方法,通常使用Get_Region()。

blit_to_texture(target, level, x, y, z=0)

在当前绑定的纹理上绘制此图像 target

此图像被复制到纹理中,以便此图像的锚点与给定的 xy 目标纹理的坐标。如果当前绑定的纹理是3D纹理,则 z 坐标指定要插入的图像切片。

get_image_data()

获取此图像的ImageData视图。

对返回实例的更改可能会反映在此映像中,也可能不会反映在此映像中。

返回类型:

ImageData

在 1.1 版本加入.

get_mipmapped_texture()

检索一个 Texture 实例,其中填充了所有mipmap级别。

返回类型:

Texture

在 1.1 版本加入.

get_region(x, y, width, height)

检索此图像的矩形区域。

参数:
x集成

区域的左边缘。

y集成

区域的底边。

width集成

区域的宽度。

height集成

区域的高度。

返回类型:

AbstractImage

get_texture(rectangle=False)

A Texture 此图像的视图。

参数:
rectangle布尔尔

未使用过的。保留是为了兼容。

在 1.1.4. 版本加入.

返回类型:

Texture

在 1.1 版本加入.

save(filename=None, file=None, encoder=None)

将此图像保存到文件。

参数:
filename应力

用于设置图像文件格式,如果是,则打开输出文件 file 未指明。

file类文件对象或无

要向其写入图像数据的文件。

encoderImageEncoder或无

如果未指定,则尝试与文件扩展名匹配的所有编码器。如果所有操作都失败,则会引发第一次尝试的异常。

anchor_x = 0
anchor_y = 0
class BufferImage(x, y, width, height)

基类:AbstractImage

抽象的帧缓冲区。

get_image_data()

获取此图像的ImageData视图。

对返回实例的更改可能会反映在此映像中,也可能不会反映在此映像中。

返回类型:

ImageData

在 1.1 版本加入.

get_region(x, y, width, height)

检索此图像的矩形区域。

参数:
x集成

区域的左边缘。

y集成

区域的底边。

width集成

区域的宽度。

height集成

区域的高度。

返回类型:

AbstractImage

format = ''

用于图像数据的格式字符串。

gl_buffer = 1029

此缓冲区的OpenGL读写目标。

gl_format = 0

图像数据的OpenGL格式常量。

owner = None
class BufferImageMask(x, y, width, height)

基类:BufferImage

模板缓冲区的一位。

format = 'R'

用于图像数据的格式字符串。

gl_format = 6401

图像数据的OpenGL格式常量。

class ColorBufferImage(x, y, width, height)

基类:BufferImage

颜色帧缓冲区。

此类用于包装原色缓冲区(即后台缓冲区)

blit_to_texture(target, level, x, y, z)

在当前绑定的纹理上绘制此图像 target

此图像被复制到纹理中,以便此图像的锚点与给定的 xy 目标纹理的坐标。如果当前绑定的纹理是3D纹理,则 z 坐标指定要插入的图像切片。

get_texture(rectangle=False)

A Texture 此图像的视图。

参数:
rectangle布尔尔

未使用过的。保留是为了兼容。

在 1.1.4. 版本加入.

返回类型:

Texture

在 1.1 版本加入.

format = 'RGBA'

用于图像数据的格式字符串。

gl_format = 6408

图像数据的OpenGL格式常量。

class DepthBufferImage(x, y, width, height)

基类:BufferImage

深度缓冲区。

blit_to_texture(target, level, x, y, z)

在当前绑定的纹理上绘制此图像 target

此图像被复制到纹理中,以便此图像的锚点与给定的 xy 目标纹理的坐标。如果当前绑定的纹理是3D纹理,则 z 坐标指定要插入的图像切片。

get_texture(rectangle=False)

A Texture 此图像的视图。

参数:
rectangle布尔尔

未使用过的。保留是为了兼容。

在 1.1.4. 版本加入.

返回类型:

Texture

在 1.1 版本加入.

format = 'R'

用于图像数据的格式字符串。

gl_format = 6402

图像数据的OpenGL格式常量。

class Texture(width, height, target, tex_id)

基类:AbstractImage

加载到视频内存中的图像,可以高效地绘制到帧缓冲区。

通常,您将通过访问 texture 任何其他AbstractImage的成员。

参数:
region_class类(TextureRegion的子类)

构造此纹理的区域时要使用的。

tex_coords元组

浮点数的12元组,命名为(u1,v1,r1,u2,v2,r2,...)。U、v、r指定顶点1-4的3D纹理坐标。顶点按左下角、右下角、右上角和左上角的顺序指定。

target集成

GL纹理目标(例如, GL_TEXTURE_2D )。

level集成

此纹理的mipmap级别。

region_class

TextureRegion 的别名

bind(texture_unit: int = 0)

按编号绑定到特定的纹理单位。

bind_image_texture(unit, level=0, layered=False, layer=0, access=35002, fmt=34836)

绑定为ImageTexture以与 ComputeShaderProgram

备注

需要具有GL_ARB_COMPUTE_SHADER扩展名的OpenGL 4.3或4.2。

blit(x, y, z=0, width=None, height=None)

将此图像绘制到活动帧缓冲区。

该图像将在左下角处绘制 (x - anchor_xy - anchor_yz )。

blit_into(source, x, y, z)

source 在这张图片上。

source 将复制到此图像中,以便其锚点与 xy 参数。如果此图像是3D纹理,则 z 坐标指定要复制到的图像切片。

请注意,如果 source 大于此图像(否则定位会导致副本越界),则必须传递 source 添加到此方法,通常使用Get_Region()。

classmethod create(width, height, target=3553, internalformat=32856, min_filter=None, mag_filter=None, fmt=6408, blank_data=True)

创建纹理

创建具有指定尺寸、目标和格式的纹理。返回时,纹理将被绑定。

参数:
width集成

纹理的宽度,以像素为单位。

height集成

纹理高度(以像素为单位)。

target集成

指定要使用的纹理目标的GL常量,通常为 GL_TEXTURE_2D

internalformat集成

给出纹理内部格式的GL常量;例如, GL_RGBA 。内部格式决定了纹理数据将如何在内部存储。如果 None ,则会创建纹理,但不会进行初始化。

min_filter集成

用于此纹理的微型滤镜,通常 GL_LINEARGL_NEAREST

mag_filter集成

用于此纹理的放大滤镜,通常 GL_LINEARGL_NEAREST

fmt集成

GL常量提供纹理的格式;例如, GL_RGBA 。格式指定我们期望写入纹理的像素数据的格式,理想情况下应该与内部格式相同。

blank_data布尔尔

设置为True将使用全零来初始化纹理数据。设置为假,将在没有数据的情况下初始化纹理。

返回类型:

Texture

delete()

删除此纹理及其占用的内存。在此之后,它可能不会再被使用。

get_image_data(z=0)

获取该纹理的图像数据。

对返回的实例所做的更改不会反映在此纹理中。

参数:
z集成

对于3D纹理,指要检索的图像切片。

返回类型:

ImageData

get_region(x, y, width, height)

检索此图像的矩形区域。

参数:
x集成

区域的左边缘。

y集成

区域的底边。

width集成

区域的宽度。

height集成

区域的高度。

返回类型:

AbstractImage

get_texture(rectangle=False)

A Texture 此图像的视图。

参数:
rectangle布尔尔

未使用过的。保留是为了兼容。

在 1.1.4. 版本加入.

返回类型:

Texture

在 1.1 版本加入.

get_transform(flip_x=False, flip_y=False, rotate=0)

应用简单的转换创建此图像的副本。

变换仅应用于纹理坐标; get_image_data() 将返回未转换的数据。变换将在锚点周围应用。

参数:
flip_x布尔尔

如果为True,则返回的图像将水平翻转。

flip_y布尔尔

如果为True,则返回的图像将垂直翻转。

rotate集成

返回图像的顺时针旋转度数。仅支持90度增量。

返回类型:

TextureRegion

colors = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
default_mag_filter = 9729
default_min_filter = 9729
images = 1
level = 0
tex_coords = (0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0)
tex_coords_order = (0, 1, 2, 3)
property uv

包含左、下、右、上2D纹理坐标的元组。

x = 0
y = 0
z = 0
class TextureRegion(x, y, z, width, height, owner)

基类:Texture

纹理的矩形区域,看起来就像是单独的纹理。

blit_into(source, x, y, z)

source 在这张图片上。

source 将复制到此图像中,以便其锚点与 xy 参数。如果此图像是3D纹理,则 z 坐标指定要复制到的图像切片。

请注意,如果 source 大于此图像(否则定位会导致副本越界),则必须传递 source 添加到此方法,通常使用Get_Region()。

delete()

删除纹理区域不起作用。取而代之的是对拥有纹理进行操作。

get_image_data()

获取该纹理的图像数据。

对返回的实例所做的更改不会反映在此纹理中。

参数:
z集成

对于3D纹理,指要检索的图像切片。

返回类型:

ImageData

get_region(x, y, width, height)

检索此图像的矩形区域。

参数:
x集成

区域的左边缘。

y集成

区域的底边。

width集成

区域的宽度。

height集成

区域的高度。

返回类型:

AbstractImage

class TileableTexture(width, height, target, tex_id)

基类:Texture

一种可以有效地平铺的纹理。

使用 create_for_image 要构造的类方法。

blit_tiled(x, y, z, width, height)

使该纹理在给定区域上平铺。

图像将平铺,目标矩形的左下角与此纹理的锚点对齐。

classmethod create_for_image(image)
get_region(x, y, width, height)

检索此图像的矩形区域。

参数:
x集成

区域的左边缘。

y集成

区域的底边。

width集成

区域的宽度。

height集成

区域的高度。

返回类型:

AbstractImage

图像序列

class AbstractImageSequence

抽象的图像序列。

该序列对于存储体积的图像动画或切片很有用。为实现高效访问,请使用 texture_sequence member. The class also implements the sequence interface (_ _len__, __getitem__, _ _setitem__)。

get_animation(period, loop=True)

在该图像序列上为给定的恒定帧速率创建动画。

:参数
period浮动

显示每一帧的秒数。

loop布尔尔

如果为True,则动画将连续循环。

返回类型:

Animation

在 1.1 版本加入.

get_texture_sequence()

获取纹理序列。

返回类型:

TextureSequence

在 1.1 版本加入.

class TextureSequence

基类:AbstractImageSequence

一系列纹理的界面。

典型的实现存储多个 TextureRegion S合二为一 Texture 从而最大限度地减少状态变化。

get_texture_sequence()

获取纹理序列。

返回类型:

TextureSequence

在 1.1 版本加入.

class UniformTextureSequence

基类:TextureSequence

用于一系列纹理的界面,每个纹理都具有相同的维度。

参数:
item_width集成

序列中每个纹理的宽度。

item_height集成

序列中每个纹理的高度。

property item_height
property item_width
class TextureGrid(grid)

基类:TextureRegion, UniformTextureSequence

包含纹理区域的规则栅格的纹理。

要构造,请创建一个 ImageGrid 第一名::

image_grid = ImageGrid(...)
texture_grid = TextureGrid(image_grid)

纹理网格可以作为单个纹理访问,也可以作为 TextureRegion 。作为序列访问时,可以指定整数索引,其中图像按从左下角到右上角的顺序排列::

# assume the texture_grid is 3x3:
current_texture = texture_grid[3] # get the middle-left image

您还可以在Sequence方法中指定元组,其地址为 row, column **

# equivalent to the previous example:
current_texture = texture_grid[1, 0]

在切片中使用元组时,返回的序列位于切片定义的矩形区域上::

# returns center, center-right, center-top, top-right images in that
# order:
images = texture_grid[(1,1):]
# equivalent to
images = texture_grid[(1,1):(3,3)]
get(row, column)
columns = 1
item_height = 0
item_width = 0
items = ()
rows = 1
class Texture3D(width, height, target, tex_id)

基类:Texture, UniformTextureSequence

具有多个图像切片的纹理。

使用 create_for_imagescreate_for_image_grid 要构造的类方法。

classmethod create_for_image_grid(grid, internalformat=6408)
classmethod create_for_images(images, internalformat=6408, blank_data=True)
item_height = 0
item_width = 0
items = ()

图案

class ImagePattern

抽象图像创建类。

create_image(width, height)

创建给定大小的图像。

参数:
width集成

要创建的图像的宽度

height集成

要创建的图像高度

返回类型:

AbstractImage

class CheckerImagePattern(color1=(150, 150, 150, 255), color2=(200, 200, 200, 255))

基类:ImagePattern

创建一个带有可平铺棋盘格图像的图像。

create_image(width, height)

创建给定大小的图像。

参数:
width集成

要创建的图像的宽度

height集成

要创建的图像高度

返回类型:

AbstractImage

class SolidColorImagePattern(color=(0, 0, 0, 0))

基类:ImagePattern

创建用纯色填充的图像。

create_image(width, height)

创建给定大小的图像。

参数:
width集成

要创建的图像的宽度

height集成

要创建的图像高度

返回类型:

AbstractImage

数据

class ImageData(width, height, fmt, data, pitch=None)

基类:AbstractImage

表示为无符号字节字符串的图像。

参数:
data应力

像素数据,根据 formatpitch

format应力

读取或写入时使用的格式字符串 data

pitch集成

每行的字节数。负值表示自上而下的排列。

blit(x, y, z=0, width=None, height=None)

将此图像绘制到活动帧缓冲区。

该图像将在左下角处绘制 (x - anchor_xy - anchor_yz )。

blit_to_texture(target, level, x, y, z, internalformat=None)

将此图像绘制到当前绑定的纹理 target

此图像的锚点将与给定的 xy 坐标。如果当前绑定的纹理是3D纹理,则 z 参数提供要插入的图像切片。

如果 internalformat 则使用glTexImage来初始化纹理;否则,使用glTexSubImage来更新区域。

create_texture(cls, rectangle=False)

创建包含此图像的纹理。

参数:
cls类(纹理的子类)

要构造的类。

rectangle布尔尔

未使用过的。保留是为了兼容。

在 1.1 版本加入.

返回类型:

cls or cls.region_class

get_data(fmt=None, pitch=None)

获取图像的字节数据。

参数:
fmt应力

返回数据的格式字符串。

pitch集成

每行的字节数。负值表示自上而下的排列。

在 1.1 版本加入.

返回类型:

sequence of bytes, or str

get_image_data()

获取此图像的ImageData视图。

对返回实例的更改可能会反映在此映像中,也可能不会反映在此映像中。

返回类型:

ImageData

在 1.1 版本加入.

get_mipmapped_texture()

返回带有mipmap的纹理。

如果 set_mipmap_Image 已使用至少一个图像调用,则将使用定义的图像集。否则,将自动生成mipmap。

返回类型:

Texture

在 1.1 版本加入.

get_region(x, y, width, height)

检索该图像数据的矩形区域。

参数:
x集成

区域的左边缘。

y集成

区域的底边。

width集成

区域的宽度。

height集成

区域的高度。

返回类型:

ImageDataRegion

get_texture(rectangle=False)

A Texture 此图像的视图。

参数:
rectangle布尔尔

未使用过的。保留是为了兼容。

在 1.1.4. 版本加入.

返回类型:

Texture

在 1.1 版本加入.

set_data(fmt, pitch, data)

设置图像的字节数据。

参数:
fmt应力

返回数据的格式字符串。

pitch集成

每行的字节数。负值表示自上而下的排列。

data字符串或字节序列

图像数据。

在 1.1 版本加入.

set_mipmap_image(level, image)

为特定级别设置mipmap图像。

Mipmap图像将应用于通过 get_mipmapped_texture

参数:
level集成

要设置图像的Mipmap级别必须>=1。

imageAbstractImage

要设置的图像。必须具有该mipmap级别的正确尺寸(即宽度>>级别、高度>>级别)

property format

数据的格式字符串。读写。

类型:

应力

class CompressedImageData(width, height, gl_format, data, extension=None, decoder=None)

基类:AbstractImage

表示适合直接上载到驱动程序的一些压缩数据的图像。

blit_to_texture(target, level, x, y, z)

在当前绑定的纹理上绘制此图像 target

此图像被复制到纹理中,以便此图像的锚点与给定的 xy 目标纹理的坐标。如果当前绑定的纹理是3D纹理,则 z 坐标指定要插入的图像切片。

get_mipmapped_texture()

检索一个 Texture 实例,其中填充了所有mipmap级别。

返回类型:

Texture

在 1.1 版本加入.

get_texture(rectangle=False)

A Texture 此图像的视图。

参数:
rectangle布尔尔

未使用过的。保留是为了兼容。

在 1.1.4. 版本加入.

返回类型:

Texture

在 1.1 版本加入.

set_mipmap_data(level, data)

设置mipmap级别的数据。

提供的数据提供了给定mipmap级别的压缩图像。图像必须具有正确的标高尺寸(即宽度>>标高、高度>>标高);但未选中此选项。如果指定了任何mipmap级别,则使用它们;否则,mipmap用于 mipmapped_texture 是自动生成的。

参数:
level集成

要设置的mipmap图像的级别。

data序列

提供压缩图像数据的字符串或字节数组/列表。数据的格式必须与构造函数中指定的格式相同。

class ImageDataRegion(x, y, width, height, image_data)

基类:ImageData

get_data(fmt=None, pitch=None)

获取图像的字节数据。

参数:
fmt应力

返回数据的格式字符串。

pitch集成

每行的字节数。负值表示自上而下的排列。

在 1.1 版本加入.

返回类型:

sequence of bytes, or str

get_region(x, y, width, height)

检索该图像数据的矩形区域。

参数:
x集成

区域的左边缘。

y集成

区域的底边。

width集成

区域的宽度。

height集成

区域的高度。

返回类型:

ImageDataRegion

set_data(fmt, pitch, data)

设置图像的字节数据。

参数:
fmt应力

返回数据的格式字符串。

pitch集成

每行的字节数。负值表示自上而下的排列。

data字符串或字节序列

图像数据。

在 1.1 版本加入.

其他班级

class BufferManager

管理上下文的帧缓冲区集。

使用 get_buffer_manager() 获取此类在当前上下文中的实例。

get_buffer_mask()

获取空闲的位掩码缓冲区。

位掩码缓冲区是引用模板缓冲区中的单个位的缓冲区。如果没有空闲位, ImageException 都被养大了。位掩码缓冲区被垃圾收集时释放位。

返回类型:

BufferImageMask

get_color_buffer()

获取颜色缓冲区。

返回类型:

ColorBufferImage

get_depth_buffer()

获取深度缓冲区。

返回类型:

DepthBufferImage

static get_viewport()

获取当前OpenGL视区尺寸。

返回类型:

4-tuple of float.

返回:

左、上、右、下维度。

class ImageGrid(image, rows, columns, item_width=None, item_height=None, row_padding=0, column_padding=0)

基类:AbstractImage, AbstractImageSequence

放置在图像上的假想网格,允许轻松访问该图像的常规区域。

网格既可以作为完整的图像访问,也可以作为图像序列访问。最有用的应用程序是以 TextureGrid **

image_grid = ImageGrid(...)
texture_grid = image_grid.get_texture_sequence()

或作为一种 Texture3D **

image_grid = ImageGrid(...)
texture_3d = Texture3D.create_for_image_grid(image_grid)
get_image_data()

获取此图像的ImageData视图。

对返回实例的更改可能会反映在此映像中,也可能不会反映在此映像中。

返回类型:

ImageData

在 1.1 版本加入.

get_texture(rectangle=False)

A Texture 此图像的视图。

参数:
rectangle布尔尔

未使用过的。保留是为了兼容。

在 1.1.4. 版本加入.

返回类型:

Texture

在 1.1 版本加入.

get_texture_sequence()

获取纹理序列。

返回类型:

TextureSequence

在 1.1 版本加入.

功能

create(width, height, pattern=None)

创建一个可选地填充了给定图案的图像。

参数:
width集成

要创建的图像的宽度

height集成

要创建的图像高度

patternImagePattern或无

填充图像的图案。如果未指定,图像最初将是透明的。

返回类型:

AbstractImage

备注

您不能假设返回类型是ImageData或CompressedImageData,但模式可以自由返回AbstractImage的任何子类。

get_buffer_manager()

获取当前OpenGL上下文的缓冲区管理器。

返回类型:

BufferManager

load(filename, file=None, decoder=None)

从文件加载图像。

参数:
filename应力

用于猜测图像格式,并在 file 未指明。

file类文件对象或无

任何受支持格式的图像数据源。

decoderImageDecoder或无

如果未指定,则尝试为文件扩展名注册的所有解码器。如果均未成功,则引发来自第一个解码器的异常。

返回类型:

AbstractImage

备注

您不能对返回类型做任何假设;通常它将是ImageData或CompressedImageData,但是解码器可以自由地返回AbstractImage的任何子类。

load_animation(filename, file=None, decoder=None)

从文件加载动画。

目前,唯一受支持的格式是GIF。

参数:
filename应力

用于猜测动画格式,并在 file 未指明。

file类文件对象或无

包含动画流的文件对象。

decoderImageDecoder或无

如果未指定,则尝试为文件扩展名注册的所有解码器。如果均未成功,则引发来自第一个解码器的异常。

返回类型:

Animation

get_max_texture_size()

查询可用的最大纹理大小

例外情况

class ImageException
class ImageEncodeException
class ImageDecodeException