Photoshop 透明度修整
Posted
技术标签:
【中文标题】Photoshop 透明度修整【英文标题】:Photoshop transparency trimming 【发布时间】:2021-02-06 22:48:58 【问题描述】:我是编程新手,现在我只能用 C# 编写代码。 我真的需要你的帮助来制作 Photoshop 修剪脚本。我已经搜索了好几天,但找不到如何实现我想要的。 它是这样的。 我有一个从画布原点偏移的字符的 PNG 图像。 现在我想从左右两边均匀地修剪透明度,直到我从左边或右边击中第一个像素(哪个先出现)然后停止修剪(这意味着一侧不会一直被修剪,因为从原点偏移)。顶部和底部也一样。几周以来,我对此感到绝望,如果有人能帮助我,我会非常高兴。 下面的示例图片。
enter image description here
【问题讨论】:
这需要在 Photoshop 中进行吗?否则,您可以查看 ImageMagick,它可能更容易处理这种情况。 @mdomino,没有任何其他选项可以。我只需要一些可以自动进行裁剪的东西。手动操作将花费很长时间,因为我要处理 5000 多个精灵。 【参考方案1】:例如:
// save current preferences and make sure PS units are in pixels
var startRulerUnits = preferences.rulerUnits
preferences.rulerUnits = Units.PIXELS
// initial variables
var doc = activeDocument;
var docW = doc.width;
var docH = doc.height;
var al = doc.activeLayer;
// bounds is an array of [left, top, right, bottom]
// coordinates from the top left corner
var bounds = al.bounds;
// distances from each side of the document
var left = bounds[0];
var right = docW - bounds[2];
var top = bounds[1];
var bottom = docH - bounds[3];
// values to resize to. if left is more than right,
// then use the smaller value multiplied by two,
// say doc width is 400px, distance from right is 50px, from left is 150px:
// crop to 400-50*2 = 300px
var resizeWidth = docW - (left > right ? right * 2: left * 2);
var resizeHeight = docH - (top > bottom ? bottom * 2: top * 2);
doc.resizeCanvas(resizeWidth, resizeHeight)
// restore original units
preferences.rulerUnits = startRulerUnits
【讨论】:
这假设非透明像素在它们自己的图层上,对吧?如果只是一层,这将行不通,还是会这样? @mdomino 是的,正如 OP 所说,他有透明的 PNG。如果它是一层(例如在 OP 的屏幕截图中使用绿色),我会将此颜色加载为选择 + 反转以确定边界框 是的,但 PNG 不总是只有一层吗?所以我假设最初的问题是指一个透明的 png 文件,它只是一层。 @mdomino 是的,PNG 是一层。在您最初提出的问题中,如果只有一层,这将不起作用,还是会这样? — 我想我不明白,抱歉。这是一层,它会工作 是的,我在问,因为我不明白这是否以及如何工作。我认为这缺少一些trim()
方法或一些找出实际边缘的东西。我没有意识到这些边缘已经保存在.bounds
属性中(我认为单层的边界就像[0, 0, docWidth, docHeight]
一样,而不关心它的透明度)。现在可以对此进行测试,正如您所说,它有效。谢谢。【参考方案2】:
虽然上面的答案是您所需要的,(我并不是想与之竞争)它可能对将来的参考有用,注意您可以修剪到最小的边界框,然后调整画布大小。
//trim image to transparent width
app.activeDocument.trim(TrimType.TRANSPARENT, true, true, true, true);
// adjust canvas size
//app.activeDocument.resizeCanvas(WIDTH, HEIGHT, AnchorPosition.MIDDLECENTER);
// AnchorPosition can vary, depending on what you want
【讨论】:
以上是关于Photoshop 透明度修整的主要内容,如果未能解决你的问题,请参考以下文章
Android 仿PhotoShop调色板应用 透明度绘制之AlphaPatternDrawable
如何在 Photoshop JavaScript API 中加载图层透明度并保存为路径?