获取坐标的RGB颜色:Adobe Illustrator

时间:2016-12-04 15:37:24

标签: javascript adobe-illustrator extendscript

我正在使用ExtendScript处理Adobe Illustrator 2015的JavaScript。有什么办法可以从下面的代码中的坐标中获取RGB值吗?

// declares a document
var doc = app.activeDocument;
// sets x and y coordinates to get color from
var xPosition = 70.0;
var yPosition = 64.0;

这是需要工作的:

// gets rgb values
double redValue = doc.getRGBColor(xPosition, yPosition).red;
double greenValue = doc.getRGBColor(xPosition, yPosition).red;
double blueValue = doc.getRGBColor(xPosition, yPosition).red;

我搜索了很多,发现this。 但是,它不起作用,因为它是在2009年发布的,或者是因为它本来是在Photoshop中。

对该问题的解决方案或该帖子的翻译将不胜感激。

3 个答案:

答案 0 :(得分:2)

[编辑:我很抱歉为您的ExtendScript问题提供了AppleScript答案。我只是在查看AS问题而忘了我去了另一个部分。我只能希望你在Mac上。如果没有,我想我只会吃掉我的羽毛并哭泣。]

有一种解决方法。它的优点(以及它的部分解决方案性质)是它适用于所有应用程序。缺点是它需要python(无论如何应该在你的Mac上 - 如果没有,那么相当容易安装),以及两个第三方软件(都是免费的),“checkModifierKeys”和“cliclick”。我一直在使用脚本菜单中出现的脚本多年。 python部分在这里描述:http://thechrisgreen.blogspot.com/2013/04/python-script-for-getting-pixel-color.html 可以使用AS do shell script命令保存,生成可执行文件并调用此脚本。 其余部分,用于选择屏幕上的一个点并等待按下控制键(这就是我的工作方式)非常简单。 基本的checkModifierKeys部分(等待直到按下Control键)是:

set controlIsDown to false
repeat until (controlIsDown)
    set initialCheck to ((do shell script "/usr/local/bin/checkModifierKeys control"))
    if initialCheck = "1" then set controlIsDown to true
end repeat

cliclick部分(获取坐标)是:

set xyGrabbed to do shell script "/usr/local/bin/cliclick p"

它似乎还有很长的路要走,但效果很好。我的版本使用此处理程序将rgb值转换为十六进制,这对我的目的很有用:

to makeHex(theNumber) --was anInteger
    --Converts an unsigned integer to a two-digit hexadecimal value
    set theResult to ""
    repeat with theIndex from 1 to 0 by -1
        set theBase to (16 ^ theIndex) as integer
        if theNumber is greater than or equal to theBase then
            set theMultiplier to ((theNumber - (theNumber mod theBase)) / theBase) as integer
            set theResult to theResult & item theMultiplier of ¬
                {1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F"}
            set theNumber to (theNumber - theBase * theMultiplier)
        else
            set theResult to (theResult & "0")
        end if
    end repeat
theResult
end makeHex

答案 1 :(得分:1)

是的,此解决方案不起作用,因为在矢量编辑器(如Illustrator)中,颜色应用于矢量项(路径),而不是单独的像素。即使您在管理员中处理像素图像,也没有脚本功能来获取像素颜色。

答案 2 :(得分:0)

我认为可以通过相当可怕的解决方案来实现:

  • 栅格化人造板。

  • 创建对象马赛克(其中一个图块〜>一个像素)。

  • 找出给定坐标下的哪一块瓷砖,并选择其颜色。