调整页面元素的大小和位置

本指南介绍了如何使用 Google Slides API 通过仿射转换来调整页面元素的大小和位置。如需从概念上了解仿射转换,请参阅转换和页面元素概念指南。

转换元素

通过 Slides API,您可以重新定位和缩放页面上的元素。为此,请先确定需要应用哪种转换,然后使用包含一个或多个 UpdatePageElementTransformRequest 元素的 presentations.batchUpdate() 方法应用该转换。

您可以使用 ApplyMode 进行转换:

  • ABSOLUTE 转换会替换元素的现有转换矩阵。您在转换更新请求中省略的任何参数都会设置为零。

  • RELATIVE 转换会与元素的现有转换矩阵相乘(乘法顺序很重要):

$$A' = BA$$

相对转换是指从页面元素的当前位置移动或缩放该元素。例如,将某个形状向左移动 100 点,或将其旋转 40 度。绝对转换会舍弃现有的位置和缩放信息;例如,将形状移动到页面中心,或将其缩放到特定宽度。

复杂的转换通常可以表示为一系列更简单的转换。 预先计算转换(使用矩阵乘法组合多个转换)通常可以减少开销。

对于某些操作,您必须知道元素的现有转换参数。如果您没有这些值,可以使用 presentations.pages.get() 方法检索它们。

翻译

平移是指将网页元素移动到同一网页上的新位置。绝对平移会将元素移动到特定点,而相对平移会将元素移动特定距离。

基本平移转换矩阵的形式如下:

$$T=\begin{bmatrix} 1 & 0 & translate\_x\\ 0 & 1 & translate\_y\\ 0 & 0 & 1 \end{bmatrix}$$

使用 UpdatePageElementTransformRequest 平移元素(而不改变其大小、剪切或方向)时,可以使用以下 AffineTransform 结构之一:

// Absolute translation:
{
  'transform': {
    'scaleX':  current scaleX value,
    'scaleY':  current scaleY value,
    'shearX':  current shearX value,
    'shearY':  current shearY value,
    'translateX': X coordinate to move to,
    'translateY': Y coordinate to move to,
    'unit': 'EMU' // or 'PT'
  }
}

// Relative translation (scaling must also be provided to avoid a matrix multiplication error):
{
  'transform': {
    'scaleX':  1,
    'scaleY':  1,
    'translateX': X coordinate to move by,
    'translateY': Y coordinate to move by,
    'unit': 'EMU' // or 'PT'
  }
}

缩放

缩放是指沿 X 轴或 Y 轴拉伸或挤压元素以更改其大小的操作。基本缩放转换矩阵的形式如下:

$$S=\begin{bmatrix} scale\_x & 0 & 0\\ 0 & scale\_y & 0\\ 0 & 0 & 1 \end{bmatrix}$$

您可以直接使用此矩阵形式作为 RELATIVE 转换来调整元素的大小,但这也会影响元素的渲染剪切和转换。如需缩放元素而不影响其剪切或平移,请切换到其元素参考框架

旋转

旋转转换使用缩放和剪切参数围绕某个点旋转页面元素。基本旋转转换矩阵具有以下形式,其中旋转角度(以弧度为单位)是从 X 轴开始逆时针测量的:

$$R=\begin{bmatrix} cos(\theta) & sin(\theta) & 0\\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}$$

与缩放一样,您可以直接使用此矩阵形式作为 RELATIVE 转换来旋转元素,但这会导致元素围绕网页的原点旋转。如需使元素围绕其中心点或其他点旋转,请切换到该元素参考框架

反思

反射是指元素沿特定直线或轴的镜像。基本的 x 轴和 y 轴反射转换矩阵具有以下形式:

$$F_x=\begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}\qquad\qquad F_y=\begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}$$

与缩放一样,您可以直接使用此矩阵形式作为 RELATIVE 转换来反射元素,但这也会导致元素平移。如需在不进行任何平移的情况下反映元素,请切换到其元素参考框架

元素参考帧

直接对网页元素应用基本的缩放旋转反射转换会在网页的参考框架中产生转换。例如,基本旋转会使元素绕页面的原点(左上角)旋转。不过,您可以在元素的参考框架中操作,例如围绕元素的中心点旋转元素。

如需在元素自身的参考框架内转换元素,请将其置于两个其他平移之间:一个在前的平移 T1,用于将元素中心移动到页面原点;一个在后的平移 T2,用于将元素移回其原始位置。完整操作可以表示为矩阵乘积:

$$A' = T2 \times B \times T1 \times A$$

您还可以通过将不同的点平移到原点来切换到其他参考框架。这些点将成为新参考框架的中心。

您可以单独执行每种转换,即按顺序发出 RELATIVE 转换请求。理想情况下,您应该使用矩阵乘法预先计算上述 A',并将结果作为单个 ABSOLUTE 转换应用。或者,预先计算 T2 * B * T1 的乘积,并将其作为单个 RELATIVE 转换应用。就 API 操作而言,这两种方法都比单独发送转换请求更高效。

限制

某些尺寸调整和定位字段与某些类型的网页元素不兼容。下表总结了某些网页元素与尺寸调整和定位字段的兼容性:

字段 形状 视频
翻译
发展壮大 否**
倾斜

如需更新表格的行维度和列维度,请使用 UpdateTableRowPropertiesRequestUpdateTableColumnPropertiesRequest

如果网页元素存在剪切,则所有尺寸调整和定位字段都可能会产生意外结果。所有限制随时可能更改。如需了解最新信息,请参阅 Google Slides API

重构的值

创建网页元素时,您可以指定提供特定视觉效果的大小和转换。不过,Slides API 可能会将您提供的值替换为可产生相同视觉效果的其他值。一般来说,如果您使用 API 写入尺寸,则无法保证返回的尺寸相同。不过,如果考虑转换,您应该会得到相同的结果。