Simple STEGANO WATERMARKER
Publié : sam. 09/juil./2022 9:57
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
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