如何使用 Autoit 将曲线重新绘制到 Photoshop?

How to redraw a curve to Photoshop with Autoit?

我想在 Photoshopmspaint 上绘制一条特定的曲线。应该保存此绘图操作,以便以完全相同的方式重新绘制该曲线。我怎样才能用 Autoit 做到这一点?有没有录音和播放机制?据我所知,AU3 录音机不再可用。

Photoshop 只是一个例子。我希望能够为不同的目的和程序做那种绘图记录。也许也适用于在线图像编辑器或其他东西。

我对Autoit还不是很熟悉。我不希望有完整的代码示例,也许你可以给我一个想法 - 这会很有帮助。


目前我尝试了一些鼠标功能,如MouseDownMouseMove等,这很有趣,但我真的没有概念来记录和重绘这些鼠标操作。


如果我需要澄清更多,请告诉我 - 我会尽力做到准确。

我建议使用两个脚本,一个用于录制,第二个用于重播录制的动作。

录音代码:

; declaration
Global $sFileCoordinates            = @ScriptDir & '\RecordedMouseMoveCoordinates.txt'
Global $iRecordingDurationInSeconds = 10
Global $iXSave, $iYSave

; functions
Func _recordMouseMoveCoordinatesToFile()
    Local $aPos = MouseGetPos()

    If $aPos[0] <> $iXSave Or $aPos[1] <> $iYSave Then
        FileWrite($hFile, $aPos[0] & ',' & $aPos[1] & @CRLF)

        Local $aPos = MouseGetPos()
        $iXSave = $aPos[0]
        $iYSave = $aPos[1]
    EndIf

    Sleep(80)
EndFunc

; processing
Sleep(4000) ; wait 4 seconds to place your mouse to the start position

Global $hFile  = FileOpen($sFileCoordinates, 1 + 256)
Global $hTimer = TimerInit()

While Round((TimerDiff($hTimer) / 1000), 1) <= $iRecordingDurationInSeconds
    ToolTip(Round((TimerDiff($hTimer) / 1000), 1))
    _recordMouseMoveCoordinatesToFile()
WEnd

FileClose($hFile)

录制将在 4 秒延迟后开始。这应该允许将鼠标移动到绘图操作的起点。

Global $iRecordingDurationInSeconds = 10 表示您的绘图操作应在 10 秒内完成(工具提示显示剩余秒数)。这里是秒脚本。

重绘曲线的代码:

; declaration
Global $sFileCoordinates = @ScriptDir & '\RecordedMouseMoveCoordinates.txt'

; functions
Func _getFileContent($sFile)
    Local $hFile        = FileOpen($sFile, 256)
    Local $sFileContent = FileRead($hFile)
    FileClose($hFile)
    Return $sFileContent
EndFunc

Func _drawRecordedMouseMoveCoordinatesFromFile($sContent)
    Local $aFileContent = StringSplit($sContent, @CRLF, 1)

    Local $iX = StringSplit($aFileContent[1], ',')[1]
    Local $iY = StringSplit($aFileContent[1], ',')[2]

    MouseMove($iX, $iY, 4)
    MouseDown('left')

    For $i = 1 To $aFileContent[0] Step 1
        If $aFileContent[$i] <> '' Then
            Local $iX = StringSplit($aFileContent[$i], ',')[1]
            Local $iY = StringSplit($aFileContent[$i], ',')[2]

            MouseMove($iX, $iY, 4)
        EndIf
    Next

    MouseUp('left')
EndFunc

; processing
Sleep(2000) ; wait 2 seconds till start

Global $sFileContent = _getFileContent($sFileCoordinates)
_drawRecordedMouseMoveCoordinatesFromFile($sFileContent)

有 2 秒的启动延迟。所有保存的坐标将以记录的相同方式执行。它以MouseDown('left')开始,然后鼠标移动到MouseUp('left')

注意事项:

由于坐标与您的 window 无关,因此这种方法并不是很可靠。请参阅帮助文件中的 Opt('MouseCoordMode', 0|1|2) 以获取更多信息。如果你想绘制不止一条直线或曲线,这种方法不是最好的。但由于您的问题仅描述了该要求,所以应该没问题。