Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Наложить печать с датой на картинку (http://forum.oszone.net/showthread.php?t=351498)

Eugene_Пилигрим@vk 05-07-2022 12:21 2987878

Наложить печать с датой на картинку
 
Здравствуйте. Помогите справиться с задачей.
Нужно на определен. картинку в заданном месте наложить печать с датой.
Подскажите, есть ли в АвтоАйти ф-ция или либа соотв. для работы с данной задачей?

iglezz 06-07-2022 19:42 2987991

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

Eugene_Пилигрим@vk 07-07-2022 11:47 2988011

Спасибо, попробую. Стороннее ПО не подходит. Там девушки будут с этим хуком работать.


Время: 21:49.

Время: 21:49.
© OSzone.net 2001-