Lo que debes hacer que ambos scripts hagan lo mismo.
Al parecer recolectaste scripts de internet y pretendes que funcionen pero ambos son diferentes.
Te pongo los metodos encode de php y decode de java funcionando, te toca a ti escribir el encode en java y el decode en php, aunque simplemente tienes que transcribir y hacer cambios mínimos de sintaxis.
Código PHP:
Ver original<?php
class S12y
{
private $source = "";
private $target = "";
private $img = null;
private $size = [];
public function __construct($source, $target = "")
{
$this->source = $source;
$this->target = $target;
}
public function encode($message)
{
for($pxy=2; $pxy<$this->size[1]; $pxy+=2)
{
for($pxx=1; $pxx<$this->size[0]; $pxx++)
{
if($message)
{
$red += $ord[0]; if($red > 255) $red -= 255;
$green += $ord[1]; if($green > 255) $green -= 255;
$blue += $ord[2]; if($blue > 255) $blue -= 255;
}
else
{
break 2;
}
}
}
imagepng($this->img, ($this->target ?
$this->target : $this->source)); }
public function decode()
{
// TO-DO
$message = "";
return $message;
}
}
$s12y = new S12y("imgen.png", "imagen-con-mensaje.png");
$s12y->encode("Hola!, mi nombre es NSD.");
Código Java:
Ver originalpackage steganography;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class S12y {
private int[] size;
{
this(source, "");
}
{
this.source = source;
this.target = target;
try {
this.
img = ImageIO.
read(new File(this.
source)); e.printStackTrace();
}
this.size = new int[2];
this.size[0] = this.img.getWidth();
this.size[1] = this.img.getHeight();
}
public void encode()
{
// TO-DO
}
{
outerloop:
for(int pxy=2; pxy<this.size[1]; pxy+=2)
{
for(int pxx=1; pxx<this.size[0]; pxx++)
{
int old_rgb = this.img.getRGB(pxx, pxy-1);
int new_rgb = this.img.getRGB(pxx, pxy);
if(old_rgb != new_rgb)
{
int old_red = oldc.getRed();
int old_green = oldc.getGreen();
int old_blue = oldc.getBlue();
int new_red = newc.getRed();
int new_green = newc.getGreen();
int new_blue = newc.getBlue();
String ord
= (old_red
<= new_red
? new_red
- old_red
: new_red
+ 255 - old_red
)+""; ord += (old_green <= new_green ? new_green - old_green : new_green + 255 - old_green);
ord += (old_blue <= new_blue ? new_blue - old_blue : new_blue + 255 - old_blue);
}
else
break outerloop;
}
}
return message;
}
public static void main
(String[] args
) { S12y img = new S12y("[path-to]/imagen-con-mensaje.png");
System.
out.
println(img.
decode()); }
}
La tecnica que se hace uso aca es muy simple, para cada letra se obtiene su valor ascii y luego los 3 digitos de dicho valor.
Luego, se recorre la imagen leyendo de a dos filas de pixeles, en la primera, se guarda el color de la segunda sumandole a cada canal de RGB un digito del valor ascii de la letra.
Cuando se acaba el mensaje, osea que se grabaron todas las letras, se guarda un pixel repetido en ambas lineas.
La funcion que lo decodifica hace lo mismo, va leyendo de a dos lineas y comparando los valores, rearma el codigo ascii y obtiene el caracter.
Una imagen puede contener ancho*alto/2 caracteres encubiertos.