> 16) & 0xFF), (($color >> 8 ) & 0xFF), ($color & 0xFF)); imagesetpixel($picFinal, $x, $y, $color); } } return $picFinal; } /* Récupérer l'image cachée */ function steganoDisplay($resFinal, $resHiddenPic) { for($x=0; $x< picWidth($resFinal); $x++) { for($y=0; $y< picHeight($resFinal); $y++) { /* On supprime les bits de poids fort, c'est une autre manière de réaliser la fonction deleteColorHighBits */ $color = (getPixelColor($resHiddenPic, $x, $y) << 4); $color = imagecolorallocate($resFinal, (($color >> 16) & 0xFF), (($color >> 8 ) & 0xFF), ($color & 0xFF)); imagesetpixel($resFinal, $x, $y, $color); } } return $resFinal; } /* Enregistrement de l'image (vérifiez les droits d'accès...) au format PNG 0 <--- qualité --- compression ---> 9 */ function recordPNGPic($picRes, $path, $quality = 0, $filters = PNG_NO_FILTER ) { imagepng($picRes, $path, $quality, $filters); } /* On récupère la couleur d'un pixel */ function getPixelColor($res, $x, $y) { return imagecolorat($res, $x, $y); } /* On applique un filtre pour supprimer les bits de poids faible */ function deleteColorLowBits($intColor) { return ($intColor & 0xF0F0F0); } /* On applique un filtre pour supprimer les bits de poids fort */ function deleteColorHighBits($intColor) { return ($intColor & 0x0F0F0F); } /* On superpose les 2 couleurs */ function joinColorBits($intColor1, $intColor2) { return ($intColor1 | $intColor2); } /* Créer une image PNG cachant une autre image et l'enregistrer sur le disque */ function generatePNGSteganoPicture($imToHide, $imToDisp, $pathToRecord) { $resPicToHide = fromPicture($imToHide); $resPicToDisplay = fromPicture($imToDisp); $resPicFinal = trueColor(picWidth($resPicToDisplay), picHeight($resPicToDisplay)); recordPNGPic( steganoHide($resPicFinal, $resPicToDisplay, $resPicToHide) , $pathToRecord); } /* Créer une image PNG semblable à celle qui a été cachée, et l'enregistrer sur le disque */ function generatePNGSteganoPictureReverse($steganoPicture, $pathToRecord) { $resSteganoPicture = fromPicture($steganoPicture); $resPicFinal = trueColor(picWidth($resSteganoPicture), picHeight($resSteganoPicture)); recordPNGPic( steganoDisplay($resSteganoPicture, $resSteganoPicture) , $pathToRecord); } /** Cacher une image **/ /* L'image à cacher */ $imToHide = 'imageACacher.png'; /* L'image qui cachera l'image à cacher */ $imToDisp = 'iMageQuiCachera.jpg'; /* Le nom de l'image finale */ $steganoRecordPath ='stegano.png'; /** ************************************************** **/ /** ****** On lance donc la création de l'image ****** **/ generatePNGSteganoPicture($imToHide, $imToDisp, $steganoRecordPath); /** ************************************************** **/ /** ************************************************** **/ /** Récupérer une image cachée **/ /* L'image contenant une autre image */ $steganoPicture = 'stegano.png'; /* L'image qui a été cachée et qui est maintenant découverte */ $imUnhide = 'steganoReverse.png'; /** ************************************************** **/ /** ****** On lance donc la création de l'image ****** **/ generatePNGSteganoPictureReverse($steganoPicture, $imUnhide); /** ************************************************** **/ /** ************************************************** **/ ?>