<?php ////////////////////////////////////////////////////////////////////////// // // // Rafael Páez - @fikih888 // // LSB avanzado - Least Significant Bit (1/2) // // Script que permite ocultar una imagen bicolor en otra // // mediante la técnica LSB // // // ////////////////////////////////////////////////////////////////////////// if($argc!=6) { echo "\n Modo de empleo: ocultar.php formato_portadora[jpeg/png] formato_oculta[jpeg/png] imagen_portadora imagen_a_ocultar imagen_resultante\n\n"; } else { //Obtenemos los argumentos $tipo_imagen=$argv[1]; $tipo_imagen_oculta=$argv[2]; $nombre_portadora=$argv[3]; $nombre_oculta=$argv[4]; $nombre_salida=$argv[5]; if($tipo_imagen != "jpeg" && $tipo_imagen != "png") { echo " El formato de la imagen de entrada no es correcto! Especifica \"jpeg\" o \"png\".\n\n"; } if($tipo_imagen_oculta != "jpeg" && $tipo_imagen_oculta != "png") { echo " El formato de la imagen de entrada no es correcto! Especifica \"jpeg\" o \"png\".\n\n"; } else { echo "\n Procesando........\n"; ///////////////////// // Procedemos a ocultar la imagen //cargamos imagen portadora if($tipo_imagen=="jpeg") { $archivo_imagen=imagecreatefromjpeg("$nombre_portadora"); } else { $archivo_imagen=imagecreatefrompng("$nombre_portadora"); } //cargamos imagen a ocultar if($tipo_imagen_oculta=="jpeg") { $archivo_imagen_oculta=imagecreatefromjpeg("$nombre_oculta"); } else { $archivo_imagen_oculta=imagecreatefrompng("$nombre_oculta"); } //comprobamos tamanyo imagenes $xmax_portadora=imagesx($archivo_imagen); $ymax_portadora=imagesy($archivo_imagen); $xmax_oculta=imagesx($archivo_imagen_oculta); $ymax_oculta=imagesy($archivo_imagen_oculta); if($xmax_portadora < $xmax_oculta || $ymax_portadora < $ymax_oculta) { echo "\n Error! La imagen a ocultar es demasiado grande para la imagen portadora.\n"; echo "Dimensiones imagen portadora: $xmax_portadora x $ymax_portadora \n"; echo "Dimensiones imagen a ocultar: $xmax_imagen_oculta x $ymax_imagen_oculta \n"; } else { echo " Ocultando.........\n"; $imagen_nueva=ImageCreatetruecolor($xmax_portadora, $ymax_portadora); //Recorremos todos los pixeles for($y=0;$y<$ymax_portadora;$y++) { for($x=0;$x < $xmax_portadora;$x++) { if($x < $xmax_oculta && $y < $ymax_oculta) { //Obtenemos el color rgb del pixel a ocultar $rgb=imagecolorat($archivo_imagen_oculta, $x, $y); //si no es blanco puro modificamos el color (16777215 = color blanco en rgb) if($rgb != 16777215) { $rgb_original=imagecolorat($archivo_imagen, $x, $y); $rnew=($rgb_original >> 16) & 0xFF; $gnew=($rgb_original >> 8) & 0xFF; $bnew=$rgb_original & 0xFF; //modificamos el lsb if($rnew!=0) $rnew=$rnew-1; else $rnew=$rnew+1; if($gnew!=0) $gnew=$gnew-1; else $gnew=$gnew+1; if($bnew!=0) $bnew=$bnew-1; else $bnew=$bnew+1; //Creamos el rgb nuevo $rgbnew = ($rnew << 16); $rgbnew = $rgbnew | ($gnew << 8); $rgbnew = $rgbnew | $bnew; //Imagesetpixel($imagen_nueva,$x,$y,0xf61e1e); Imagesetpixel($imagen_nueva,$x,$y,$rgbnew); } else { //se deja el mismo color del pixel original $rgb_original=imagecolorat($archivo_imagen, $x, $y); Imagesetpixel($imagen_nueva,$x,$y,$rgb_original); } } else { //se deja el mismo color del pixel original $rgb_original=imagecolorat($archivo_imagen, $x, $y); Imagesetpixel($imagen_nueva,$x,$y,$rgb_original); } } } //Creamos la imagen ImagePng($imagen_nueva,$nombre_salida); ImageDestroy($imagen_nueva); ImageDestroy($archivo_imagen); ImageDestroy($archivo_imagen_oculta); echo "\n Imagen ocultada correctamente! :)\n\n"; } } } ?>