首页 > 解决方案 > 如何使用 Autoit 在 Photoshop 中重绘曲线?

问题描述

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

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

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


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


如果我必须澄清更多,请告诉我 - 我会尽力准确。

标签: drawingautoit

解决方案


我建议使用两个脚本,一个用于录制,另一个用于回放录制的操作。

录音代码:

; 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')

注意:

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


推荐阅读