好吧,伙计们,在编程方面,我是一个新手,但我已经设法完成了一个简单的脚本来完成部分工作。
我有1,500张刹车片需要调整到1:1的比例尺,这样图像在屏幕上的大小与现实生活中的大小相同。我已经知道每个图像的大小需要(垫的实际宽度为* 2.834)
我当前的脚本会提示用户输入制动片的宽度,并指定打击垫图像的大小(以像素为单位),但每个打击垫的形状不同,图像like in this example周围的边框大小不同。 / p>
我需要的是用户能够从打击垫的一侧选择另一侧,这将返回打击垫的当前宽度(以像素为单位)。然后,我将能够根据焊盘的当前尺寸划分焊盘需要的大小,以找到整个图像的比例因子。
答案 0 :(得分:1)
更好的解决方案:
您可以使用scriptUI使用图像弹出一个新窗口,然后将一个事件监听器附加到该图像,遗憾的是,您无法对该文档本身执行此操作。在回调函数中,将X coord添加到数组中,如果数组长度大于2,则隐藏窗口并运行process函数。这样,第一次点击设置第一个点,第二个点击设置第二个点。然后第三次单击运行处理功能。如果你想真正想要你可以使用右键点击重置整个事情,如果你陷入困境但我会把它留给你。
#target photoshop
function processImage(image, partWidth) {
// Your function to resize the image based on the part width
alert(partWidth); // For testing purposes
}
// Save the current unit preferences (optional)
var startRulerUnits = app.preferences.rulerUnits
var startTypeUnits = app.preferences.typeUnits
// Set units to PIXELS
app.preferences.rulerUnits = Units.PIXELS
app.preferences.typeUnits = TypeUnits.PIXELS
var doc = app.activeDocument; // or the next file in your file array if doing multiple
var clicks = [];
var width = 0;
var w = new Window("dialog", "The Image");
var img = w.add("image", undefined, File(doc.fullName));
img.addEventListener("click", function(k) {
if (clicks.length < 2) {
clicks.push(k.clientX);
}
else {
// absolute value so it doesn't matter if
// we click right or left side first
width = Math.abs(clicks[0] - clicks[1]);
w.hide;
processImage(doc, width);
}
});
w.show();
// Reset to previous unit prefs (optional)
app.preferences.rulerUnits = startRulerUnits;
app.preferences.typeUnits = startTypeUnits;
您需要做的就是使用类似Photoshop Script - resize images in folder (dialog box)之类的东西遍历一堆图像,然后将此代码放入循环中以批量执行此操作。
(如果图像大于屏幕尺寸并且缩小图像可能会出现问题,或者不幸的是,使用scriptUI添加滚动条非常困难和hacky)
Lame Solution:
一种方法是让用户使用矩形选框工具(方形选择框)选择零件的宽度。然后,您可以访问选择的尺寸。选择范围以[top-leftX, top-leftY, bottom-rightX, bottom-rightY]
的形式存储在数组中。要获得选择的宽度,您可以从第二个中减去第一个X值。
示例摘录:
#target photoshop
var bounds = app.activeDocument.selection.bounds;
var selectionWidth = bounds[3] - bounds[0];
alert(selectionWidth);
唯一需要注意的是用户必须在运行脚本之前进行选择。
使用scriptUI事件侦听器可能有另一种方法。麻烦的是它们必须应用于像窗口或窗口这样的scriptUI对象。您可以尝试创建一个不透明度为0的大窗口,并向窗口添加一个单击事件以捕获鼠标坐标。老实说,使用java或C#或其他东西在photoshop外更容易。