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 透明度修整的主要内容,如果未能解决你的问题,请参考以下文章

PHP中Photoshop叠加与不透明度的融合

Android 仿PhotoShop调色板应用 透明度绘制之AlphaPatternDrawable

photoshop中改变透明度的快捷键是啥

如何在 Photoshop JavaScript API 中加载图层透明度并保存为路径?

photoshop做出的图片插到其他软件里时总是有后面的白色背景,如何用photoshop做出背景透明的图片?

Photoshop一些常用的快捷键