Page 1 sur 1

Simple STEGANO WATERMARKER

Publié : sam. 09/juil./2022 9:57
par Ar-S
Simple STEGANO WATERMARKER est un programme qui va insérer une signature de votre choix dans la couche alpha des derniers pixels de vos photos.
Le resultat est sauvée en PNG pour conserver la couche alpha.

Libre à vous de le perfectionner (clé de chiffrement etc...)
EnJoY

Code : Tout sélectionner

; =====================================================
;
; Simple STEGANO WATERMARKER
; by Ar-S // PB 6.00 x64
; https://ldvmultimedia.com
; 2022/07/09
; Free to use
;
; Only ASCII Chars avalaible
; ======================================================


Structure Car
    min.c
    maj.c
EndStructure

UsePNGImageDecoder()
UseJPEGImageDecoder()
UsePNGImageEncoder()

Declare.l pixel_3car(pixel)

Global NewList mot.car()
Global Fichier$
Global LONG
Global C
Global COUL.q


Procedure.l CatchPixel(pixel)
    
    R=Red(pixel)
    g=Green(pixel)
    b=Blue(pixel)
    a=Alpha(pixel)

    If a - mot()\min > a -mot()\maj
        a = mot()\maj
    Else
        a = mot()\min
    EndIf
    
    pixel=RGBA(R,G,B,a)

    ProcedureReturn pixel
EndProcedure




Word$ = InputRequester("Watermark","Enter your signature","")
LONG = Len(Word$)

If LONG > 0
    position = 1    
    For i = 1 To LONG
        Lettre$ = Mid(Word$,position,1)
        AddElement(mot())
        mot()\min = Asc(LCase(Lettre$))
        Mot()\maj = Asc(UCase(Lettre$))
        position +1
    Next
    
Else
    MessageRequester("Error","You have to enter a word.. This program will end",#PB_MessageRequester_Error)
    End
    
EndIf


IMAGE$ = ""
Filtre$ = "Image PNG/JPG/TIFF/TGA|*.tga;*.tiff;*.png;*.jpg"
Filtre  = 0
Fichier$ = OpenFileRequester("Choose a picture", FichierParDefaut$, Filtre$, Filtre)
If Fichier$ = ""
   End
EndIf 

If LoadImage(0,Fichier$)
     L = ImageWidth(0) - LONG
     H = ImageHeight(0)-1
    
    CreateImage(1, ImageWidth(0), ImageHeight(0), 32, $FFFFFF)
    
    StartDrawing(ImageOutput(1))
    DrawingMode(#PB_2DDrawing_AllChannels )
    DrawAlphaImage(ImageID(0),0,0,255)
    FreeImage(0)

    POS = L
    
    ;-1st Pixel where we indicate the length of the watermark
    LNGPIX = Point(0,0)
    ; We write the length
    Plot(0,0,RGBA(Red(LNGPIX),Green(LNGPIX),Blue(LNGPIX),LONG))
    
    ForEach mot()      
        COUL = Point(POS,H)
        Debug "RGBA = " + Str(Red(COUL))+","+ Str(Green(COUL))+","+ Str(Blue(COUL))+","+ Str(Alpha(COUL))
        Plot (POS,H, CatchPixel(COUL))
        POS+1
    Next   
    StopDrawing()
    
    DS$ = GetPathPart(Fichier$)
    FS$ = GetFilePart(Fichier$,#PB_FileSystem_NoExtension)
    Debug DS$+FS$+".png"
    SaveImage(1,DS$+FS$+"_signed.png",#PB_ImagePlugin_PNG,0,32 )
    FreeImage(1)
    
    
    
    
    ;-// CHECKING RESULT //////////////////////////////////////
    If LoadImage(0,DS$+FS$+"_signed.png")
        StartDrawing(ImageOutput(0))
        DrawingMode(#PB_2DDrawing_AlphaChannel)
        LONG = Alpha(Point(0,0))
        L = ImageWidth(0) - LONG
        H = ImageHeight(0)-1
        
        POS = L
        For i = 1 To LONG      
            Debug Chr(Alpha(Point(POS,H)))
            POS+1
        Next   
        StopDrawing()
        
    EndIf
    
EndIf

Re: Simple STEGANO WATERMARKER

Publié : mer. 13/juil./2022 16:47
par threedslider
Cool merci Ar-S pour ton code, cela peut toujours servir ^^.

Happy coding !

Re: Simple STEGANO WATERMARKER

Publié : jeu. 14/juil./2022 19:35
par Kwai chang caine
Cool cette manière de planquer du texte 8O
J'avais du le lire, mais j'avais pas compris (comme dab) :oops:
Merci du partage 8)