<?php
	//////////////////////////////////////////////////////////////////////////
	//									//
	//   Rafael Páez - @fikih888  						//
	//   LSB avanzado - Least Significant Bit (2/2)				//
	//   Script que permite obtener una imagen bicolor oculta en otra	//
	//   mediante la técnica LSB						//
	//									//
	//////////////////////////////////////////////////////////////////////////


	if($argc!=4)
	{
		echo "\n  Modo de empleo: obtener.php imagen_original imagen_portadora imagen_resultante\n\n";
	}
	else
	{
		//Obtenemos los argumentos
		$nombre_original=$argv[1];
		$nombre_portadora=$argv[2];
		$nombre_salida=$argv[3];

			echo "\n  Procesando........\n";


			/////////////////////
			// Procedemos a obtener la imagen


			//cargamos imagen original y la portadora
			$archivo_imagen_original=imagecreatefrompng("$nombre_original");
			$archivo_imagen_portadora=imagecreatefrompng("$nombre_portadora");


			//comprobamos tamanyo imagenes
			$xmax_original=imagesx($archivo_imagen_original);
			$ymax_original=imagesy($archivo_imagen_original);
			$xmax_portadora=imagesx($archivo_imagen_portadora);
			$ymax_portadora=imagesy($archivo_imagen_portadora);

			if($xmax_portadora != $xmax_original || $ymax_portadora != $ymax_original)
			{
				echo "\n  Error! Las dimensiones de las imagenes no son iguales.\n";
				echo "Dimensiones imagen original: $xmax_original x $ymax_original \n";
				echo "Dimensiones imagen portadora: $xmax_portadora x $ymax_portadora \n";
			}
 			else
			{
				echo "  Obteniendo.........\n";
				$imagen_nueva=ImageCreatetruecolor($xmax_portadora, $ymax_portadora);


				//Recorremos todos los pixeles de la imagen portadora
				for($y=0;$y<$ymax_original;$y++)
				{
					for($x=0;$x<$xmax_original;$x++)
					{
						//Obtenemos el color rgb de la imagen original
						$rgb_original=imagecolorat($archivo_imagen_original, $x, $y);
 	
						//Obtenemos el color rgb de la imagen portadora
						$rgb_portadora=imagecolorat($archivo_imagen_portadora, $x, $y);

						// si se ha modificado --> pintar de negro						
						if($rgb_original != $rgb_portadora)
						{
							Imagesetpixel($imagen_nueva,$x,$y,0x000000);
						}
						else //sino --> pintar de blanco
						{
							Imagesetpixel($imagen_nueva,$x,$y,0xFFFFFF);
						}
					}
				}

				//Creamos la imagen
				ImagePng($imagen_nueva,$nombre_salida);  
			
				ImageDestroy($imagen_nueva);
				ImageDestroy($archivo_imagen_original);
				ImageDestroy($archivo_imagen_portadora);

				echo "\n  Imagen obtenida correctamente! :)\n\n";
			}
	}
?>