Perfecto con Imagemagick
Una duda básica, viendo que mediante PHP lo puedo hacer para una imagen, quiero hacer lo mismo pero para todas las imágenes que se encuentran en un directorio. Planteo lo siguiente:
<?php
// Cargar la estampa y la foto para aplicarle la marca de agua
$estampa = imagecreatefrompng('estampa3.png');
// listar ficheros
function listar_archivos($carpeta){
if(is_dir($carpeta)){
if($dir = opendir($carpeta)){
while(($archivo = readdir($dir)) !== false){
if($archivo != '.' && $archivo != '..' && $archivo != '.htaccess'){
$archivo = "'{$archivo}'";
$vector[$i]= $archivo;
//$im = imagecreatefromjpeg($vector[$i]);
$im = imagecreatefromjpeg($archivo);
$margen_dcho = 100;
$margen_inf = 10;
$sx = imagesx($estampa);
$sy = imagesy($estampa);
imagecopy($im, $estampa, imagesx($im) - $sx - $margen_dcho, imagesy($im) - $sy - $margen_inf, 0, 0, imagesx($estampa), imagesy($estampa));
header('Content-type: image/png');
imagepng($im, $vector[$i], 0);
imagedestroy($im); $i++;
}
}
closedir($dir);
}
}
}
echo listar_archivos('C:\inetpub\vhosts\elotrolado2017.net\httpdocs\fts');
La idea es recorrer un directorio que contendra imágenes y almacenar todos los nombres de las imagenes en un vector. A cada elemento del vector aplicarle el tratamiento de la marca de agua para que genere la imagen en el directorio.
Si a
imagecreatefromjpeg() le paso directamente la 'imagen.jpeg' funciona correctamente, si le paso un elemento del vector, que contiene 'imagen.jpeg' no funciona.
Lo que quiero hacer para 1 imagen -y escribiendo esta de maneral literal en el código- funciona pero si lo quiero automatizar recorriendo las imágenes que hay en un directorio y usando los nombres de éstas no lo consigo.
Simplificado (FUNCIONA)
<?php
// Cargar la estampa y la foto para aplicarle la marca de agua
$estampa = imagecreatefrompng('estampa3.png');
$im = imagecreatefromjpeg('foto.jpeg');
// Establecer los márgenes para la estampa y obtener el alto/ancho de la imagen de la estampa
$margen_dcho = 120;
$margen_inf = 10;
$sx = imagesx($estampa);
$sy = imagesy($estampa);
// Copiar la imagen de la estampa sobre nuestra foto usando los índices de márgen y el
// ancho de la foto para calcular la posición de la estampa.
imagecopy($im, $estampa, imagesx($im) - $sx - $margen_dcho, imagesy($im) - $sy - $margen_inf, 0, 0, imagesx($estampa), imagesy($estampa));
// Imprimir y liberar memoria
header('Content-type: image/png');
$inom = '_con_watermark.png';
imagepng($im, $inom, 0);
imagedestroy($im);
Simplificado (NO FUNCIONA)
<?php
// Cargar la estampa y la foto para aplicarle la marca de agua
$estampa = imagecreatefrompng('estampa3.png');
$nom = "foto.jpeg";
$archivo ="'{$nom}'";
$im = imagecreatefromjpeg($archivo);
// Establecer los márgenes para la estampa y obtener el alto/ancho de la imagen de la estampa
$margen_dcho = 120;
$margen_inf = 10;
$sx = imagesx($estampa);
$sy = imagesy($estampa);
// Copiar la imagen de la estampa sobre nuestra foto usando los índices de márgen y el
// ancho de la foto para calcular la posición de la estampa.
imagecopy($im, $estampa, imagesx($im) - $sx - $margen_dcho, imagesy($im) - $sy - $margen_inf, 0, 0, imagesx($estampa), imagesy($estampa));
// Imprimir y liberar memoria
header('Content-type: image/png');
$inom = '_con_watermark.png';
imagepng($im, $inom, 0);
imagedestroy($im);