Eugene_Пилигрим@vk,
В Autoit в теории есть доступ ко всему, что есть в Windows
Ниже несложный пример с добавлением изображения из файла в качестве штампа (произвольный размер штампа и отсчёт координат сверху/снизу/справа/слева изображения).
Относительно просто можно добавить рисование фигур, накладывание текста.
При некотором упорстве можно добавить прозрачность и вращение накладываемого изображения.
пример
Код:
#include <MsgBoxConstants.au3>
#include "__GDIPlus_ImageAddStamp1.au3"
_GDIPlus_Startup()
$in = @ScriptDir & "\image.jpg"
$stamp = @ScriptDir & "\stamp.png"
__GDIPlus_ImageAddStamp1($in, $stamp, '=top-left.jpg', 0, 0, 99, 99, 1, 255)
__GDIPlus_ImageAddStamp1($in, $stamp, '=top-right.jpg', -1, 0, 99, 99, 1, 255)
__GDIPlus_ImageAddStamp1($in, $stamp, '=bottom-left.jpg', 0, -1, 99, 99, 1, 255)
__GDIPlus_ImageAddStamp1($in, $stamp, '=bottom-right.jpg', -1, -1, 99, 99, 1, 255)
__GDIPlus_ImageAddStamp1($in, $stamp, '=top-left-noaspect.jpg', 0, 0, 99, 99, 0, 255)
$inw = @ScriptDir & "\=overwrite-image.jpg"
FileCopy($in, @ScriptDir & "\=overwrite-image.jpg", 1)
__GDIPlus_ImageAddStamp1($inw, $stamp, -1, 0, 0, 99, 99, 0, 255, 512)
_GDIPlus_ShutDown()
__GDIPlus_ImageAddStamp1.au3
Код:
#include-once
#include <GDIPlus.au3>
#include <FileConstants.au3>
Func __GDIPlus_ImageAddStamp1($inputImage, $stampImage, $outputImage, _
$dirX = 0, $dirY = 0, _
$posX = 0, $posY = 0, _
$aspectRatio = 1, _
$stampW = -1, $stampH = -1 _
)
Local $hInput, $hStamp, $hGraphics
Local $overwrite
Local $outputFile
Local $retcode = 1
$hInput = _GDIPlus_ImageLoadFromFile($inputImage)
If @error Then $retcode = -1
If $retcode > 0 Then
$hStamp = _GDIPlus_ImageLoadFromFile($stampImage)
If @error Then $retcode = -2
EndIf
If $retcode > 0 Then
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hInput)
If @error Then $retcode = -3
EndIf
If $retcode > 0 Then
$overwrite = IsNumber($outputImage) And $outputImage = -1
Local $stampWT = _GDIPlus_ImageGetWidth($hStamp)
Local $stampHT = _GDIPlus_ImageGetHeight($hStamp)
If $stampW = -1 And $stampH = -1 Then
Local $stampWidth = $stampWT
Local $stampHeight = $stampHT
ElseIf $stampW > 0 And $stampH = -1 Then
Local $stampWidth = $stampW
Local $stampHeight = $aspectRatio = 1 ? Round($stampW / $stampWT * $stampHT) : $stampHT
ElseIf $stampW = -1 And $stampH > 0 Then
Local $stampHeight = $stampH
Local $stampWidth = $aspectRatio = 1 ? Round($stampH / $stampHT * $stampWT) : $stampWT
Else ;$stampW > 0 And $stampH > 0
Local $stampWidth = $stampW
Local $stampHeight = $stampH
EndIf
Local $stampLeft = ($dirX = -1) ? (_GDIPlus_ImageGetWidth($hInput) - $stampWidth - $posX) : ($posX)
Local $stampTop = ($dirY = -1) ? (_GDIPlus_ImageGetHeight($hInput) - $stampHeight - $posY) : ($posY)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hStamp, $stampLeft, $stampTop, $stampWidth, $stampHeight)
$outputFile = $overwrite ? $inputImage & '~tmp' & StringMid($inputImage, StringInStr($inputImage, '.', 1, -1)) : $outputImage
_GDIPlus_ImageSaveToFile($hInput, $outputFile)
If @error Then $retcode = -11
EndIf
If $hInput Then _GDIPlus_ImageDispose($hInput)
If $hStamp Then _GDIPlus_ImageDispose($hStamp)
If $hGraphics Then _GDIPlus_GraphicsDispose($hGraphics)
If $retcode > 0 And $overwrite Then
If Not FileMove($outputFile, $inputImage, $FC_OVERWRITE) Then $retcode = -13
EndIf
Return $retcode
EndFunc
ЗЫ
Можно и не лезть в дебри WinAPI, а обойтись любым пакетным инструментом вроде imagemagick - примеры использования будет найти проще.
|