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)
这假设已经应用了适当的视图变换和投影。
一些图像有一个内在的“锚点”:这是一个将对齐到 x
和 y
绘制图像时的坐标。默认情况下,锚点是图像的左下角。您可以使用锚点在给定点居中显示图像,例如:
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.format 和 ImageData.pitch 避免了数据转换的需要(假设您可以使用这种任意格式的数据)。
班级
图片
- class AbstractImage(width, height)
表示图像的抽象类。
- 参数:
- width集成
图像的宽度
- height集成
图像高度
- anchor_x集成
相对于图像数据左边缘的锚点的X坐标
- anchor_y集成
相对于图像数据底边的锚点的Y坐标
- blit(x, y, z=0)
将此图像绘制到活动帧缓冲区。
该图像将在左下角处绘制 (
x -
anchor_x ,y -
anchor_y ,z
)。
- blit_into(source, x, y, z)
画 source 在这张图片上。
source 将复制到此图像中,以便其锚点与 x 和 y 参数。如果此图像是3D纹理,则 z 坐标指定要复制到的图像切片。
请注意,如果 source 大于此图像(否则定位会导致副本越界),则必须传递 source 添加到此方法,通常使用Get_Region()。
- blit_to_texture(target, level, x, y, z=0)
在当前绑定的纹理上绘制此图像 target 。
此图像被复制到纹理中,以便此图像的锚点与给定的 x 和 y 目标纹理的坐标。如果当前绑定的纹理是3D纹理,则 z 坐标指定要插入的图像切片。
- get_region(x, y, width, height)
检索此图像的矩形区域。
- 参数:
- x集成
区域的左边缘。
- y集成
区域的底边。
- width集成
区域的宽度。
- height集成
区域的高度。
- 返回类型:
- get_texture(rectangle=False)
A
Texture
此图像的视图。- 参数:
- rectangle布尔尔
未使用过的。保留是为了兼容。
在 1.1.4. 版本加入.
- 返回类型:
在 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)
-
抽象的帧缓冲区。
- get_region(x, y, width, height)
检索此图像的矩形区域。
- 参数:
- x集成
区域的左边缘。
- y集成
区域的底边。
- width集成
区域的宽度。
- height集成
区域的高度。
- 返回类型:
- 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 。
此图像被复制到纹理中,以便此图像的锚点与给定的 x 和 y 目标纹理的坐标。如果当前绑定的纹理是3D纹理,则 z 坐标指定要插入的图像切片。
- get_texture(rectangle=False)
A
Texture
此图像的视图。- 参数:
- rectangle布尔尔
未使用过的。保留是为了兼容。
在 1.1.4. 版本加入.
- 返回类型:
在 1.1 版本加入.
- format = 'RGBA'
用于图像数据的格式字符串。
- gl_format = 6408
图像数据的OpenGL格式常量。
- class DepthBufferImage(x, y, width, height)
基类:
BufferImage
深度缓冲区。
- blit_to_texture(target, level, x, y, z)
在当前绑定的纹理上绘制此图像 target 。
此图像被复制到纹理中,以便此图像的锚点与给定的 x 和 y 目标纹理的坐标。如果当前绑定的纹理是3D纹理,则 z 坐标指定要插入的图像切片。
- get_texture(rectangle=False)
A
Texture
此图像的视图。- 参数:
- rectangle布尔尔
未使用过的。保留是为了兼容。
在 1.1.4. 版本加入.
- 返回类型:
在 1.1 版本加入.
- format = 'R'
用于图像数据的格式字符串。
- gl_format = 6402
图像数据的OpenGL格式常量。
- class Texture(width, height, target, tex_id)
-
加载到视频内存中的图像,可以高效地绘制到帧缓冲区。
通常,您将通过访问 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_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_x ,y -
anchor_y ,z
)。
- blit_into(source, x, y, z)
画 source 在这张图片上。
source 将复制到此图像中,以便其锚点与 x 和 y 参数。如果此图像是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_LINEAR
或GL_NEAREST
- mag_filter集成
用于此纹理的放大滤镜,通常
GL_LINEAR
或GL_NEAREST
- fmt集成
GL常量提供纹理的格式;例如,
GL_RGBA
。格式指定我们期望写入纹理的像素数据的格式,理想情况下应该与内部格式相同。- blank_data布尔尔
设置为True将使用全零来初始化纹理数据。设置为假,将在没有数据的情况下初始化纹理。
- 返回类型:
- delete()
删除此纹理及其占用的内存。在此之后,它可能不会再被使用。
- get_region(x, y, width, height)
检索此图像的矩形区域。
- 参数:
- x集成
区域的左边缘。
- y集成
区域的底边。
- width集成
区域的宽度。
- height集成
区域的高度。
- 返回类型:
- get_texture(rectangle=False)
A
Texture
此图像的视图。- 参数:
- rectangle布尔尔
未使用过的。保留是为了兼容。
在 1.1.4. 版本加入.
- 返回类型:
在 1.1 版本加入.
- get_transform(flip_x=False, flip_y=False, rotate=0)
应用简单的转换创建此图像的副本。
变换仅应用于纹理坐标;
get_image_data()
将返回未转换的数据。变换将在锚点周围应用。- 参数:
- flip_x布尔尔
如果为True,则返回的图像将水平翻转。
- flip_y布尔尔
如果为True,则返回的图像将垂直翻转。
- rotate集成
返回图像的顺时针旋转度数。仅支持90度增量。
- 返回类型:
- 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 将复制到此图像中,以便其锚点与 x 和 y 参数。如果此图像是3D纹理,则 z 坐标指定要复制到的图像切片。
请注意,如果 source 大于此图像(否则定位会导致副本越界),则必须传递 source 添加到此方法,通常使用Get_Region()。
- delete()
删除纹理区域不起作用。取而代之的是对拥有纹理进行操作。
- get_region(x, y, width, height)
检索此图像的矩形区域。
- 参数:
- x集成
区域的左边缘。
- y集成
区域的底边。
- width集成
区域的宽度。
- height集成
区域的高度。
- 返回类型:
- 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集成
区域的高度。
- 返回类型:
图像序列
- 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
-
一系列纹理的界面。
典型的实现存储多个
TextureRegion
S合二为一Texture
从而最大限度地减少状态变化。- get_texture_sequence()
获取纹理序列。
- 返回类型:
TextureSequence
在 1.1 版本加入.
- class UniformTextureSequence
-
用于一系列纹理的界面,每个纹理都具有相同的维度。
- 参数:
- 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_images 或 create_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集成
要创建的图像高度
- 返回类型:
- class CheckerImagePattern(color1=(150, 150, 150, 255), color2=(200, 200, 200, 255))
基类:
ImagePattern
创建一个带有可平铺棋盘格图像的图像。
- create_image(width, height)
创建给定大小的图像。
- 参数:
- width集成
要创建的图像的宽度
- height集成
要创建的图像高度
- 返回类型:
- class SolidColorImagePattern(color=(0, 0, 0, 0))
基类:
ImagePattern
创建用纯色填充的图像。
- create_image(width, height)
创建给定大小的图像。
- 参数:
- width集成
要创建的图像的宽度
- height集成
要创建的图像高度
- 返回类型:
数据
- class ImageData(width, height, fmt, data, pitch=None)
-
表示为无符号字节字符串的图像。
- 参数:
- data应力
像素数据,根据 format 和 pitch 。
- format应力
读取或写入时使用的格式字符串 data 。
- pitch集成
每行的字节数。负值表示自上而下的排列。
- blit(x, y, z=0, width=None, height=None)
将此图像绘制到活动帧缓冲区。
该图像将在左下角处绘制 (
x -
anchor_x ,y -
anchor_y ,z
)。
- blit_to_texture(target, level, x, y, z, internalformat=None)
将此图像绘制到当前绑定的纹理 target 。
此图像的锚点将与给定的 x 和 y 坐标。如果当前绑定的纹理是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 版本加入.
- get_mipmapped_texture()
返回带有mipmap的纹理。
如果
set_mipmap_Image
已使用至少一个图像调用,则将使用定义的图像集。否则,将自动生成mipmap。- 返回类型:
在 1.1 版本加入.
- get_region(x, y, width, height)
检索该图像数据的矩形区域。
- 参数:
- x集成
区域的左边缘。
- y集成
区域的底边。
- width集成
区域的宽度。
- height集成
区域的高度。
- 返回类型:
- get_texture(rectangle=False)
A
Texture
此图像的视图。- 参数:
- rectangle布尔尔
未使用过的。保留是为了兼容。
在 1.1.4. 版本加入.
- 返回类型:
在 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)
-
表示适合直接上载到驱动程序的一些压缩数据的图像。
- blit_to_texture(target, level, x, y, z)
在当前绑定的纹理上绘制此图像 target 。
此图像被复制到纹理中,以便此图像的锚点与给定的 x 和 y 目标纹理的坐标。如果当前绑定的纹理是3D纹理,则 z 坐标指定要插入的图像切片。
- get_texture(rectangle=False)
A
Texture
此图像的视图。- 参数:
- rectangle布尔尔
未使用过的。保留是为了兼容。
在 1.1.4. 版本加入.
- 返回类型:
在 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 版本加入.
- get_region(x, y, width, height)
检索该图像数据的矩形区域。
- 参数:
- x集成
区域的左边缘。
- y集成
区域的底边。
- width集成
区域的宽度。
- height集成
区域的高度。
- 返回类型:
- set_data(fmt, pitch, data)
设置图像的字节数据。
- 参数:
- fmt应力
返回数据的格式字符串。
- pitch集成
每行的字节数。负值表示自上而下的排列。
- data字符串或字节序列
图像数据。
在 1.1 版本加入.
其他班级
- class BufferManager
管理上下文的帧缓冲区集。
使用
get_buffer_manager()
获取此类在当前上下文中的实例。- get_buffer_mask()
获取空闲的位掩码缓冲区。
位掩码缓冲区是引用模板缓冲区中的单个位的缓冲区。如果没有空闲位, ImageException 都被养大了。位掩码缓冲区被垃圾收集时释放位。
- 返回类型:
- get_color_buffer()
获取颜色缓冲区。
- 返回类型:
- get_depth_buffer()
获取深度缓冲区。
- 返回类型:
- 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_texture(rectangle=False)
A
Texture
此图像的视图。- 参数:
- rectangle布尔尔
未使用过的。保留是为了兼容。
在 1.1.4. 版本加入.
- 返回类型:
在 1.1 版本加入.
- get_texture_sequence()
获取纹理序列。
- 返回类型:
TextureSequence
在 1.1 版本加入.
功能
- create(width, height, pattern=None)
创建一个可选地填充了给定图案的图像。
- 参数:
- width集成
要创建的图像的宽度
- height集成
要创建的图像高度
- patternImagePattern或无
填充图像的图案。如果未指定,图像最初将是透明的。
- 返回类型:
备注
您不能假设返回类型是ImageData或CompressedImageData,但模式可以自由返回AbstractImage的任何子类。
- get_buffer_manager()
获取当前OpenGL上下文的缓冲区管理器。
- 返回类型:
- load(filename, file=None, decoder=None)
从文件加载图像。
- 参数:
- filename应力
用于猜测图像格式,并在 file 未指明。
- file类文件对象或无
任何受支持格式的图像数据源。
- decoderImageDecoder或无
如果未指定,则尝试为文件扩展名注册的所有解码器。如果均未成功,则引发来自第一个解码器的异常。
- 返回类型:
备注
您不能对返回类型做任何假设;通常它将是ImageData或CompressedImageData,但是解码器可以自由地返回AbstractImage的任何子类。
- load_animation(filename, file=None, decoder=None)
从文件加载动画。
目前,唯一受支持的格式是GIF。
- 参数:
- filename应力
用于猜测动画格式,并在 file 未指明。
- file类文件对象或无
包含动画流的文件对象。
- decoderImageDecoder或无
如果未指定,则尝试为文件扩展名注册的所有解码器。如果均未成功,则引发来自第一个解码器的异常。
- 返回类型:
- get_max_texture_size()
查询可用的最大纹理大小
例外情况
- class ImageException
- class ImageEncodeException
- class ImageDecodeException