Aprende en casa Ir a KODOTI
Aprende en casa KODOTI

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
Rodríguez Patiño, Eduardo
2020-07-03 | 4,615 lecturas

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

Estudia con nosotros

🚀 Mejora tus oportunidades laborales