构造一个纹理。

语法

texture ST_MakeTexture(integer width,
                       integer height,
                       cstring url,
                       boolean to_internal  default false,
                       integer depth default 3,
                       cstring format default 'JPEG',
                       cstring compression default 'None',
                       cstring wrap default 'Wrap');
texture ST_MakeTexture(cstring table_name,
                       cstring column_name,
                       cstring key_value,
                       cstring schema_name default 'public');
texture ST_MakeTexture(integer width,
                       integer height,
                       bytea data,
                       integer depth  default 3,
                       cstring format  default 'JPEG',
                       cstring compression  default 'None',
                       cstring wrap  default 'Wrap');

参数

参数名称描述
width纹理图像的宽度。
height纹理图像的高度。
url纹理图像的路径地址。
to_internal是否转为内部存储模式,默认为false。
depth纹理图像的象元深度,必须为以下值:
  • 1: 灰度
  • 3: RGB(默认值)
  • 4: RGBA
compression纹理图像数据流的压缩方式,必须为以下值:
  • None:不压缩(默认值)
  • Zlib:Zlib压缩
format纹理图像的格式,必须为以下值:
  • Raw:原始像素矩阵
  • JPEG:JPEG格式(默认值)
  • PNG:PNG格式
wrap纹理图像环绕方式,必须为以下值:
  • Wrap:环绕模式(默认值)
  • Mirror:镜像模式
table_name已存在texture的表名。
column_name已存在texture的列名。
key_value已存在texture的查询唯一ID,用于where条件中。
schema_name已存在texture的方案名,默认为public。
data纹理图片的二进制数据流。

描述

根据纹理图片二进制的存储形态,可以划分为三种形式,可以按照实际场景需求,灵活制定纹理的存储方案:
  • 纹理图片的二进制直接存储在数据库中,优势是不需要进行外部关联,劣势是数据库内数据量会比较大。
  • 纹理图片的二进制存储在外部文件中,优势是数据库中存储容量较低,劣势是访问时性能较低。
  • 纹理数据存储在数据库单独的表中,使用时引用该数据库存储信息。

示例

-- create texture table
CREATE TABLE textures(id integer, the_texture texture);

-- Insert a 225*225 RGBA PNG file, with internal store binary stream
INSERT INTO textures VALUES (1, ST_MakeTexture(225,225,'path/example.png'::cstring, true, 4, 'PNG'));

-- Insert a 225*255 RGB JPEG file, with binary stream in file
INSERT INTO textures VALUES (2, ST_MakeTexture(225,225,'path/example.jpeg'::cstring, false, 3, 'JPEG'));

-- Insert a 256*256 RGB JPEG file, providing the binary stream
INSERT INTO textures VALUES (3, ST_MakeTexture(256,256, '\x123abcd...'::bytea));

-- insert a reference texture which is id=1 in the same table
INSERT INTO textures VALUES (4, ST_MakeTexture('textures'::cstring, 'the_texture'::cstring, 'id=1'));