如何使用 Autoit 将曲线重新绘制到 Photoshop?
How to redraw a curve to Photoshop with Autoit?
我想在 Photoshop 或 mspaint 上绘制一条特定的曲线。应该保存此绘图操作,以便以完全相同的方式重新绘制该曲线。我怎样才能用 Autoit 做到这一点?有没有录音和播放机制?据我所知,AU3 录音机不再可用。
Photoshop 只是一个例子。我希望能够为不同的目的和程序做那种绘图记录。也许也适用于在线图像编辑器或其他东西。
我对Autoit还不是很熟悉。我不希望有完整的代码示例,也许你可以给我一个想法 - 这会很有帮助。
目前我尝试了一些鼠标功能,如MouseDown
,MouseMove
等,这很有趣,但我真的没有概念来记录和重绘这些鼠标操作。
如果我需要澄清更多,请告诉我 - 我会尽力做到准确。
我建议使用两个脚本,一个用于录制,第二个用于重播录制的动作。
录音代码:
; 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)
以获取更多信息。如果你想绘制不止一条直线或曲线,这种方法不是最好的。但由于您的问题仅描述了该要求,所以应该没问题。
我想在 Photoshop 或 mspaint 上绘制一条特定的曲线。应该保存此绘图操作,以便以完全相同的方式重新绘制该曲线。我怎样才能用 Autoit 做到这一点?有没有录音和播放机制?据我所知,AU3 录音机不再可用。
Photoshop 只是一个例子。我希望能够为不同的目的和程序做那种绘图记录。也许也适用于在线图像编辑器或其他东西。
我对Autoit还不是很熟悉。我不希望有完整的代码示例,也许你可以给我一个想法 - 这会很有帮助。
目前我尝试了一些鼠标功能,如MouseDown
,MouseMove
等,这很有趣,但我真的没有概念来记录和重绘这些鼠标操作。
如果我需要澄清更多,请告诉我 - 我会尽力做到准确。
我建议使用两个脚本,一个用于录制,第二个用于重播录制的动作。
录音代码:
; 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)
以获取更多信息。如果你想绘制不止一条直线或曲线,这种方法不是最好的。但由于您的问题仅描述了该要求,所以应该没问题。