Marca de agua para imágenes con PHP

Vamos a enseñar como proteger tus fotografías agregando una marca de agua desde PHP con un script orientado a objetos.

Rodríguez Patiño, Eduardo
3,813 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado hace poco nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para restaurarla manualmente.

Señores en esta entrada vamos a enseñar como crear una marca de agua con una clase que hice para automatizar este proceso pero antes vamos a definir para que queremos una marca de agua.

Marca de agua:

  • El watermarking o marca de agua digital es una técnica esteganográfica de ocultación de información. Su objetivo principal es poner de manifiesto el uso ilícito de cierto servicio digital por parte de un usuario no autorizado. Según la wikipedia
  • Se usa para evitar que otros usen nuestro material agregando un sello para evitar el fraude. Muy usado en fotografías. Segun yo
class MarcaDeAgua{

    // Configuracion
    private $ancho = 0;
    private $alto  = 0;
    private $fuente  = '';
    private $fuente_tamano = 0;

    // Imagen
    private $imagen = '';
    private $nueva_imagen = null;

    // Texto
    private $texto = '';
    private $color = array();

    public function Configurar($i, $w, $h, $f_t = 15, $f = 'libs/font-2.ttf')
    {
        $this->imagen = $i;
        $this->ancho = $w;
        $this->alto = $h;
        $this->fuente = $f;
        $this->fuente_tamano = $f_t;
    }

    public function AgregarTexto($texto, $color = array(255, 255, 255))
    {
        $this->texto = $texto;
        $this->color = $color;
    }

    public function Preparar(){
        // Creamos la imagen
        $img = imagecreatefromjpeg($this->imagen);

        // Obtenemos los datos de tamaño
        $img_data = getimagesize($this->imagen);

        // Le asignamos el nuevo tamaño
        $this->nueva_imagen = imagecreatetruecolor($this->ancho, $this->alto);
        imagecopyresized($this->nueva_imagen, $img, 0, 0, 0, 0, $this->ancho, $this->alto, $img_data[0], $img_data[1]);

        // Agregamos el texto
        $color_elegido = ImageColorAllocate($this->nueva_imagen, $this->color[0], $this->color[1], $this->color[2]);
        $color_negro = ImageColorAllocate($this->nueva_imagen, 0, 0, 0); // NEGRO

        // Coordenadas de donde va a ir el texto
        $x = $this->fuente_tamano;
        $y = $this->alto - $this->fuente_tamano;

        // El texto negro para que lo usaremos como borde
        imagettftext($this->nueva_imagen, $this->fuente_tamano, 0, $x - 4, $y - 4, $color_negro, $this->fuente, $this->texto);
        imagettftext($this->nueva_imagen, $this->fuente_tamano, 0, $x + 4, $y + 4, $color_negro, $this->fuente, $this->texto);

        // El texto blanco
        imagettftext($this->nueva_imagen, $this->fuente_tamano, 0, $x, $y, $color_elegido, $this->fuente, $this->texto);
    }

    public function Renderizar(){
        header("Content-type: image/png");
        ImagePNG($this->nueva_imagen);
    }

    public function Guardar(){
        // Remplaza la imagen actual por la nueva
    }

    public function Obtener(){
        // Obtiene la nueva imagen
    }
}

Como funciona esto, pues es muy fácil. Lo que tenemos que hacer es configurar, agregar el texto y renderizar tal como lo dice nuestros métodos:

require_once 'libs/marca-de-agua.php';

$obj = new MarcaDeAgua();
$obj->Configurar('chuck.jpg', 700, 500, 50, 'libs/font-2.ttf');
$obj->AgregarTexto('Anexsoft');
$obj->Preparar();
$obj->Renderizar();

Detalles a tener en cuenta

Cuando descarguen el proyecto notaran una carpeta que se llama libs, dentro debemos agregar las posibles fuentes a usar

  • El método Configurar recibe los siguientes parámetros en este orden: (ruta de la imagen, ancho, alto, tamaño de la fuente, y fuente)lo 2 últimos parámetros son el tamaño de la fuente y el archivo ttf que contiene la fuente siendo ambos opcionales.
  • El método AgregarTexto recibe 2 parámetros, uno que es el texto a mostrar y el otro el color (es opcional).
  • El método Preparar hace todo el algoritmo para agregar el texto a la nueva imagen
  • El método Renderizar muestra la imagen
  • El método Obtener devuelve la nueva imagen. No esta implementado
  • El método Guardar remplaza la imagen actual por la nuestra. No esta implementado
¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín