Tengo un script para redimensionar imágenes (tal vez le sirva a alguien para reutilizar) con imagemagick pero de repente me ha empezado a dar error de que las cabeceras ya han sido enviadas, cuando antes no lo hacía. ¿alguna idea? No se que hay mal.
Código PHP:
<?php
//VARIABLES
$rutaImagick = "/ruta/a/mi/imagick6.7/bin";
$imagen = $_GET["i"];
$ancho = 0;
$alto = 0;
$color = white;
if (isset($_GET["an"])) {$ancho = $_GET["an"];}
if (isset($_GET["al"])) {$alto = $_GET["al"];}
//preparamos nombre de la imagen
$extension = pathinfo($imagen, PATHINFO_EXTENSION); //separamos extension (útil si más adelante queremos conservar extensión original del archivo
$nombreBase = basename($imagen, '.'.$extension); //separamos nombre base
$nombreImagen = "RE." . "$nombreBase$ancho" . "ANx" . "$alto" . "AL" . ".jpg"; //todas las imágenes se convierten a jpg
if (file_exists($nombreImagen)) //Si existe no convertimos, mostramos directamente
{
Header("Content-Type: image/jpeg");
readfile($nombreImagen);
}
else
{
if ($ancho!=0 && $alto==0) //Si no tiene alto o es 0 es que la imagen se reduce a proporción
{
$conversion = "$rutaImagick/convert -quality 90% $imagen";
exec("$rutaImagick/convert $conversion -scale $ancho $nombreImagen");
Header("Content-Type: image/jpeg"); // se envia la cabecera...
readfile($nombreImagen);
}
else if($ancho==0 && $alto!=0) //Si sólo tiene definido el alto
{
$medida = "x" . $alto;
$conversion = "$rutaImagick/convert -quality 90% $imagen";
exec("$rutaImagick/convert $conversion -scale $medida $nombreImagen");
Header("Content-Type: image/jpeg"); // se envia la cabecera...
readfile($nombreImagen);
}
else //ninguno de los 2 es 0. Se pone la imagen al tamaño exacto deseado rellenando espacios vacíos con el color seleccionado
{
$medida = $ancho . "x" . $alto;
//exec("convert $imagen -resize $medida -background $color -compose Copy -gravity center -extent $medida $nombreImagen");
//CODIGO FUNCIONANDO BIEN POR CONSOLA: convert tal.jpg -resize 300x50 -background white -gravity center -extent 300x50 output.jpg
$conversion = "$rutaImagick/convert -quality 90% $imagen";
$conversion = "$rutaImagick/convert $conversion -scale $ancho $nombreImagen"; //reducimos antes a escala
exec("$rutaImagick/convert $conversion -scale $medida -background $color -gravity center -extent $medida $nombreImagen");
Header("Content-Type: image/jpeg"); // se envia la cabecera...
readfile("$nombreImagen");
}
}
?>
Hay algunas cosas raras a la hora de convertir porque al tener tan poca memoria tengo muchos problemas con imágenes grandes, y lo estoy intentando solucionar, pero es que ahora ni si quiera puedo ver ninguna imagen por el citado error. ¿Veis algo raro?
Gracias!
En ninguno de los 3 casos me funciona, tanto si envío sólo el ancho, como si envío el alto como si envío ambas cosas. Lo intento ver desde la url del archivo pasandole por URL los parámetros deseados, el tema es que antes me funcionaba. No lo entiendo.
Olvidaba el error, que es este:
Código:
Warning: Cannot modify header information - headers already sent by (output started at /homepages/39/d296597816/htdocs/admin/uploads/redimensionador.php:1) in /homepages/39/d296597816/htdocs/admin/uploads/redimensionador.php on line 26
En la 26 o en la que esté el "header" es la línea que me marca.