Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


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 - примеры использования будет найти проще.

Последний раз редактировалось iglezz, 06-07-2022 в 22:53.


Отправлено: 19:42, 06-07-2022 | #2