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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Наложить печать с датой на картинку

Ответить
Настройки темы
Наложить печать с датой на картинку

Новый участник


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

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


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

Отправлено: 12:21, 05-07-2022

 

Старожил


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

Профиль | Отправить 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


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

Отправлено: 11:47, 07-07-2022 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Наложить печать с датой на картинку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
автоматически приклеить картинку на картинку Setser Хочу все знать 1 13-11-2012 13:35
Как наложить на видео текст KoRn0509 Видео и аудио: обработка и кодирование 2 23-02-2012 13:49
Как наложить звук на видео? Relax Видео и аудио: обработка и кодирование 3 30-08-2011 13:33
Как наложить символ на клаву? newbigmir Microsoft Windows Vista 1 30-03-2007 21:21
Как наложить на видео??? kotel Видео и аудио: обработка и кодирование 2 16-10-2006 07:09




 
Переход