Photoshop脚本调整基于像素尺寸的图像(脚本现在不工作)

时间:2016-01-26 21:12:35

标签: javascript photoshop photoshop-script

此脚本是我们用于在Photoshop中编辑产品照片后处理的较大Photoshop操作的一部分。我最近发现这部分动作(脚本)已经停止正常工作。它应该拍摄任何最长边大于2400像素的图像并将其缩小到2400像素,忽略任何最长边不大于2400像素的图像。但现在它正在运行,无论图像大小是什么,它会炸毁较小的图像,并在此过程中摧毁它们。

我们最近将我们的Mac客户端从10.8升级到OS 10.11,并且在此过程中还必须运行几个Photoshop更新。我会假设其中一个或两个因素。我们正在运行Photoshop CS6并且没有改变。

#target photoshop
// get a reference to the current (active) document and store it in a  variable named "doc"
doc = app.activeDocument; 

// these are our values for the end result width and height (in pixels) of our image
var fWidth = 2400;
var fHeight = 2400;

// resize. if height > width (portrait-mode) AND height is larger than 2400px -- resize based on height. otherwise, resize based on width only if width is greater than 2400px
if(doc.height > 2400,"px" || doc.width > 2400,"px") {
if (doc.height > doc.width) {
    doc.resizeImage(null,UnitValue(fHeight,"px"),null,ResampleMethod.BICUBIC);
    }
else {
    doc.resizeImage(UnitValue(fWidth,"px"),null,null,ResampleMethod.BICUBIC);
    }
}'

对此有任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

找到解决方案。感谢Mark Dee关于初始参数语法的评论(感谢Mark),我决定简化语法是最好的。

我遇到的问题是,当给PS一个数字时,它会按照你的标尺的当前单位设置单位。因此,如果用户的标尺未设置为正确的单位,则脚本无法正常工作。这是我的修复:

#target photoshop
// get a reference to the current (active) document and store it in a variable named "doc"
doc = app.activeDocument; 
// setting the ruler unit to pixels
app.preferences.rulerUnits = Units.PIXELS;

// these are our values for the end result width and height (in pixels) of our image
var fWidth = 2400;
var fHeight = 2400;

// resize. if height > width (portrait-mode) AND height is larger than 2400px -- resize based on height. otherwise, resize based on width only if width is greater than 2400px
if(doc.height > 2400 || doc.width > 2400) {
if (doc.height > doc.width) {
    doc.resizeImage(null,UnitValue(fHeight,"px"),null,ResampleMethod.BICUBIC);
    }
else {
    doc.resizeImage(UnitValue(fWidth,"px"),null,null,ResampleMethod.BICUBIC);
    }
}
// setting the ruler unit back to inches
app.preferences.rulerUnits = Units.INCHES;

我现在唯一的问题就是它手动将单位设置回英寸,我更愿意,如果它只是把它放回到"之前是什么"但我不知道该怎么做,必须进一步调查。

答案 1 :(得分:0)

您可以在变量中获取并存储当前的rulerUnits设置,您可以使用该变量来测试(并更改)脚本所需的ruleUnits。脚本完成后,您可以使用相同的变量将rulerUnits设置恢复到原来的状态。

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void serviceMethod() {}

@Transactional(propagation = Propagation.REQUIRED)
public void daoMethod1() {}

@Transactional(propagation = Propagation.REQUIRED)
public void daoMethod2() {}