[R] Ajouter un calque à une image jpg

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
locos974
Niveau 5
Niveau 5
Messages : 187
Enregistré le : sam. 08 oct. 2011 22:07
Status : Hors ligne

[R] Ajouter un calque à une image jpg

#1

Message par locos974 »

Bonjour à tous !

Cela fait un moment que je ne suis pas revenu ici !
J'espère que vous allez bien et que vous avez passer un joyeux noël ! :P

Du coup, j'ai repensé à AutoIt pour une action rébarbative, dû à des entreprises qui pique les images (grr les flemmards :mrgreen: ).
Donc j'aimerais faire comme les personnes qui protègent leur image à l'aide d'un bandeaux transparent like this : Example

Je cherche pas à un code complet, mais plutôt vers quelles UDF (si il en existe un) je dois me redirigé pour faire ceci ou bien des pistes pouvant m'aiguiller !
Au passage, aucun recherche n'abouti (p-ê car j'utilise le mauvais terme) :?:
Mais tout ça, à l'aide d'Autoit, étant donner qu'il s'agit d'environ 1000 photos.

Merci d'avance,

Cordialement, Locos !
Modifié en dernier par locos974 le mar. 27 déc. 2016 16:05, modifié 1 fois.
Cordialement Locos974.
locos974
Niveau 5
Niveau 5
Messages : 187
Enregistré le : sam. 08 oct. 2011 22:07
Status : Hors ligne

Re: [..] Ajouter un calque à une image jpg

#2

Message par locos974 »

Bon. Après quelques bonnes recherche, j'ai trouvé mon bonheur côté anglais, ils ont toujours tout :lol:

Je partage donc la solution qui convient le plus à mes attentes, j'ai dû modifié son script :
#include <GDIPlus.au3>
#include <GuiConstants.au3>
Opt("GUIOnEventMode", 1)                    ;0=disabled, 1=OnEvent mode enabled

; -----------------------------------8<-----------------------------------
$ScriptTitle                = @ScriptName ; "Merge2Images"
$ScriptRev                  = "A.02"
Global $Title               = $ScriptTitle & " - " & $ScriptRev
Global $IniFile             = StringTrimRight(@ScriptFullPath, 4) & ".ini"
; -----------------------------------8<-----------------------------------

$MergedImageBackgroundColor = 0xFF000000
$ShowFinaleMergedImage      = true
$CenterImageVertically      = False
$StrechImageVertically      = False

$ShowMergeGUIWindow         = False
$SleepTimeShowMergeGUIWindow= 2000

If $CmdLine[0] < 2 Then
    MsgBox(0+48,$Title,"Usage is:" & @CR & _
                @TAB & @ScriptName & "  <ImageName1>  <ImageName2>  [<MergedImageName.png|MergedImageName.jpg>]" & @CR & @CR & _
                "Size of MergedImage destination file will be :" & @CR & _
                @TAB & "X Size = " & @TAB & "X ImageName1 size  +  X ImageName2" & @CR & _
                @TAB & "Y Size = " & @TAB & "Size Max [ Y ImageName1  ,  Y ImageName2]")
    Exit
EndIf

$ImageName1                     = $CmdLine[1]
$ImageName2                     = $CmdLine[2]
If $CmdLine[0] = 3 Then
    $ImageCompositeName         = $CmdLine[3]
Else
    $ImageCompositeName         = "Merged_" & $CmdLine[1] & "+" & $CmdLine[2] & ".png"              ; .jpg -or- .png
EndIf

; -----------------------------------8<-----------------------------------
$GuiSizeX = 0
$GuiSizeY = 0
; -----------------------------------8<-----------------------------------
_GDIPlus_Startup()

; Load image 1
$hImage1    = _GDIPlus_ImageLoadFromFile($ImageName1)
$iX1        = _GDIPlus_ImageGetWidth($hImage1)
$iY1        = _GDIPlus_ImageGetHeight($hImage1)

; Load image 2
$hImage2    = _GDIPlus_ImageLoadFromFile($ImageName2)
$iX2        = _GDIPlus_ImageGetWidth($hImage2)
$iY2        = _GDIPlus_ImageGetHeight($hImage2)

; -----------------------------------8<-----------------------------------
; Define the Merged (Composite) image size
$GuiSizeX = $iX1
$GuiSizeY = $iY1

; -----------------------------------8<-----------------------------------
; Initialise the Drawing windows/composite image...
$hGui = GUICreate("GDIPlus Example", $GuiSizeX, $GuiSizeY)
; Show drawing window ?
If $ShowMergeGUIWindow Then
    GUISetState()
    GUISetOnEvent(-3, "_Quit")
EndIf

; -----------------------------------8<-----------------------------------
; Create Double Buffer, so the doesn't need to be repainted on PAINT-Event
$hGraphicGUI = _GDIPlus_GraphicsCreateFromHWND($hGui)                                   ;Draw to this graphics, $hGraphicGUI, to display on GUI
$hBMPBuff = _GDIPlus_BitmapCreateFromGraphics($GuiSizeX, $GuiSizeY, $hGraphicGUI)       ; $hBMPBuff is a bitmap in memory
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hBMPBuff)                                 ; Draw to this graphics, $hGraphic, being the graphics of $hBMPBuff

; -----------------------------------8<-----------------------------------
; Fill Graphics zone in black color : _GDIPlus_GraphicsClear($hGraphic)
; Fill Graphics zone in white color : _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
; Fill Graphics zone in transparent : <nothing if Merged ImageExt is .png, default back color if Merged ImageExt is .jpg>
_GDIPlus_GraphicsClear($hGraphic, $MergedImageBackgroundColor)

; VCenter & Vertical Strech both images
$VPos = 0
$YStrech = $iY1
If $StrechImageVertically Then $YStrech = $GuiSizeY
If $CenterImageVertically and Not $StrechImageVertically Then $VPos = ($GuiSizeY - $iY1)/2
_GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImage1, 0, 0, $iX1, $iY1,    0, $VPos, $iX1, $YStrech)

$VPos = 0
$YStrech = $iY2
If $StrechImageVertically Then $YStrech = $GuiSizeY
If $CenterImageVertically and Not $StrechImageVertically Then $VPos = ($GuiSizeY - $iY2)/2

$iX2        = _GDIPlus_ImageGetWidth($hImage2)
$iY2        = _GDIPlus_ImageGetHeight($hImage2)

$MargeLeft = 0
If $iX2 >= $iX1 Then
Else
   $MargeLeft = ($iX1 - $iX2) / 2
EndIf
$MargeTop = 0
If $iY2 >= $iY1 Then
Else
   $MargeTop = ($iY1 - $iY2) / 2
EndIf

_GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImage2, 0, 0, $iX2, $iY2, $MargeLeft, $MargeTop, $iX2, $YStrech)

; -----------------------------------8<-----------------------------------
; Save composite image
Local $sNewName = @ScriptDir & "\" & $ImageCompositeName
_GDIPlus_ImageSaveToFile($hBMPBuff, $sNewName)                                          ; $hBMPBuff the bitmap

; -----------------------------------8<-----------------------------------
; Show drawing window ?
If $ShowMergeGUIWindow Then
    _GDIPlus_GraphicsDrawImage($hGraphicGUI, $hBMPBuff, 0, 0)   ; Draw bitmap, $hBMPBuff, to the GUI's graphics, $hGraphicGUI.
    Sleep($SleepTimeShowMergeGUIWindow)                         ; Wait $SleepTimeShowMergeGUIWindow ms, or press Esc.
EndIf
; -----------------------------------8<-----------------------------------
; Show result saved file ?
If $ShowFinaleMergedImage Then ShellExecute($sNewName)

_Quit()

#Region Function
Func GetFromIni($SectionToken,$Token,$DefaultToken)
    $DummyToken = "#$%svd$%^@#$RVFB%QW!@#&*)NVM>?"
    $Token = IniRead($IniFile,$SectionToken,$Token,$DummyToken)
    If StringUpper($Token)  = "TRUE"        Then Return True
    If StringUpper($Token)  = "FALSE"       Then Return False
    If $Token               = $DummyToken   Then Return $DefaultToken
    Return $Token
EndFunc

;Func to auto-redraw on Windows internal PAINT messages.
Func MY_PAINT($hWnd, $msg, $wParam, $lParam)
   _GDIPlus_GraphicsDrawImage($hGraphicGUI, $hBMPBuff, 0, 0)
   Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_PAINT

Func _Quit()
    _GDIPlus_ImageDispose($hImage1)
    _GDIPlus_ImageDispose($hImage2)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hGraphicGUI)
    _WinAPI_DeleteObject($hBMPBuff)
    _GDIPlus_Shutdown()
    Exit
 EndFunc   ;==>_Quit
 #EndRegion
Voilà le lien du script officiel :
https://www.autoitscript.com/forum/topi ... bmp-files/

A tantôt ! :wink:
Cordialement Locos974.
Répondre