本指南介绍了如何使用仿射转换调整页面元素的大小和位置。如需简要了解线性转换,请参阅转换概念指南。
转换元素
借助 Google 幻灯片 API,您可以重新定位和缩放页面上的元素。为此,请先确定需要应用哪种转换,然后使用包含一个或多个 UpdatePageElementTransformRequest 元素的 presentations.batchUpdate 方法应用该转换。
转换可采用以下两种 applyModes 之一进行:
ABSOLUTE
转换会替换元素的现有转换矩阵。您从转换更新请求中省略的任何参数都会设为零。RELATIVE
转换会与元素的现有转换矩阵相乘法(乘法顺序很重要):
相对转换会将页面元素从其当前位置移动或缩放;例如,将形状向左移动 100 个点,或将其旋转 40 度。绝对转换会舍弃现有的位置和缩放信息;例如,将形状移至页面中心,或将其缩放为特定宽度。
复杂的转换通常可以表示为一系列更简单的转换。预计算转换(使用矩阵乘法组合多个转换)通常可以降低开销。
对于某些操作,您必须知道元素的现有转换参数。如果您没有这些值,可以使用 presentations.pages.get 请求检索它们。
翻译
转换只是将页面元素移至同一页面上的新位置的操作。绝对转换会将元素移至特定点,而相对转换会将元素移至特定距离。
基本平移转换矩阵的形式为:
使用 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 轴拉伸或压缩元素以更改其大小的操作。基本缩放转换矩阵的形式为:
您可以直接将此矩阵形式用作 RELATIVE
转换来调整元素的大小,但这也可能会影响元素的渲染剪裁和平移。如需在不影响元素剪裁或平移的情况下对其进行缩放,请切换到其参考框架。
旋转
旋转转换使用缩放和剪裁参数围绕某个点旋转页面元素。基本旋转转换矩阵的形式如下,其中旋转角度(以弧度为单位)是从 X 轴测量,逆时针方向移动:
与缩放一样,您可以直接将此矩阵形式用作 RELATIVE
转换来旋转元素,但这会导致元素围绕页面的原点旋转。如需围绕元素的中心或其他点旋转元素,请切换到该参考框架。
反思
反射会沿着特定线条或轴对元素进行镜像。基本 x 轴和 y 轴反射转换矩阵的形式如下:
与放大一样,您可以直接将此矩阵形式用作 RELATIVE
转换来反射元素,但这会导致元素也发生平移。如需在不进行任何平移的情况下镜像元素,请转换到其参考框架。
元素参考帧
直接将基本缩放、反射或旋转转换应用于页面元素会在页面的参考系中产生转换。例如,基本旋转会围绕页面的原点(左上角)旋转元素。不过,您可以在元素本身的参考框架中进行操作,例如围绕元素的中心点旋转元素。
如需在元素自己的参照框架中对元素进行转换,请将其封装在另外两个转换之间:前面的转换 T1
会将元素中心移至页面原点,后面的转换 T2
会将元素移回原始位置。整个运算可以表示为矩阵乘法:
您还可以改为将不同的点平移到原点,从而切换到其他参考坐标系。这些点将成为新参考框架的中心。
您可以将这些转换分别作为顺序 RELATIVE
转换请求单独执行。理想情况下,您应使用矩阵乘法预计算上述 A'
,并将结果作为单个 ABSOLUTE
转换应用。或者,预计算 T2 * B * T1
乘积,并将其作为单个 RELATIVE
转换应用。与单独发送转换请求相比,这两种方法在 API 操作方面都更高效。
限制
某些尺寸和定位字段与某些类型的页面元素不兼容。下表总结了某些网页元素与大小调整和定位字段的兼容性。
字段 | 形状 | 视频 | 表 |
---|---|---|---|
翻译 | ✔ | ✔ | ✔ |
发展壮大 | ✔ | ✔ | 否** |
剪裁 | ✔ | 否 | 否 |
** 如需更新表行和列的尺寸,请使用 UpdateTableRowPropertiesRequest
和 UpdateTableColumnPropertiesRequest
。
如果网页元素发生剪裁,所有尺寸和定位字段都可能会产生意外结果。所有限制都可能会发生变化。如需了解最新信息,请参阅 Google Slides API。
Slides API 可能会重构您的值
创建页面元素时,您可以指定大小和转换,以提供特定的视觉效果。不过,该 API 可能会将您提供的值替换为产生相同视觉效果的其他值。一般来说,如果您使用 API 写入大小,则无法保证系统会返回相同的大小。不过,如果您将转换考虑在内,应该会得到相同的结果。