如何通过Photoshop脚本获取图像图层的变换信息(非Bounds)
获取图层变换后的完整边界(含透明区域)
你当前用activeLayer.layer.bounds[0]获取的是图层实际像素内容的边界(自动裁剪掉透明区域),要获取变换后的整个图层范围(包括透明区域的变换框),可以通过图层的变换参数结合原始尺寸计算:
方法步骤(以Photoshop ExtendScript为例):
- 获取图层的变换属性(位移、缩放、旋转等)和原始尺寸
- 计算原始图层四个角经过变换后的坐标
- 从变换后的坐标中提取最小/最大X、Y值,得到完整边界
示例代码:
const activeLayer = app.activeDocument.activeLayer; const transform = activeLayer.transform; const origWidth = activeLayer.width; const origHeight = activeLayer.height; // 原始图层的中心偏移(以左上角为原点) const centerOffsetX = origWidth / 2; const centerOffsetY = origHeight / 2; // 定义原始图层的四个角坐标(以图层中心为原点) const origCorners = [ { x: -centerOffsetX, y: -centerOffsetY }, { x: centerOffsetX, y: -centerOffsetY }, { x: centerOffsetX, y: centerOffsetY }, { x: -centerOffsetX, y: centerOffsetY } ]; // 应用变换计算每个角的新坐标 const transformedCorners = origCorners.map(corner => { // 转换旋转角度为弧度 const rotationRad = transform.rotation * Math.PI / 180; // 先旋转 const rotatedX = corner.x * Math.cos(rotationRad) - corner.y * Math.sin(rotationRad); const rotatedY = corner.x * Math.sin(rotationRad) + corner.y * Math.cos(rotationRad); // 再缩放 const scaledX = rotatedX * (transform.scaleX / 100); const scaledY = rotatedY * (transform.scaleY / 100); // 最后平移(加上文档坐标的偏移) return { x: scaledX + transform.translateX + centerOffsetX, y: scaledY + transform.translateY + centerOffsetY }; }); // 提取边界的极值 const minX = Math.min(...transformedCorners.map(p => p.x)); const maxX = Math.max(...transformedCorners.map(p => p.x)); const minY = Math.min(...transformedCorners.map(p => p.y)); const maxY = Math.max(...transformedCorners.map(p => p.y)); // 最终的变换后完整边界(格式和bounds一致:[minX, minY, maxX, maxY]) const transformedBounds = [minX, minY, maxX, maxY];
说明:
activeLayer.transform包含了图层所有变换参数:translateX/translateY是位移,scaleX/scaleY是缩放比例(百分比),rotation是旋转角度- 这个方法会考虑所有变换类型(位移、缩放、旋转),计算出的边界就是变换工具显示的整个图层框范围,包含透明区域
内容的提问来源于stack exchange,提问作者Tcyily
相关产品推荐
相关产品推荐

