Hola!
Les presento mi problema:
Los archivos que tengo hasta ahora son:
index.php : es el formularo para subir el archivo.
sube_archivo.php: obtiene los datos, los guarda en la bd y sube la imagen al servidor.
modifica.php
Código PHP:
<?php
//Copyright © McAnam.com
function iPintaImagenRedimensionada ($sDirImagen, $bEscalable, $ancho, $alto, $iTipo){
$sDirImagen="$_GET[nom_dir]";
$bEscalable="0.5";
$ancho="0";
$alto="2";
$iTipo="2";
// Cogemos los datos de la imagen
$vDatosImg = @getimagesize($sDirImagen);
if (!$vDatosImg) return -8;
// Recogemos el Tipo Mime
if (isset($vDatosImg['mime']))
$sTipo = $vDatosImg['mime'];
else if(isset($vDatosImg[2]))
$sTipo = image_type_to_mime_type($vDatosImg[2]);
else if (isset($iTipo))
$sTipo = image_type_to_mime_type($iTipo);
else
return -10;
// Recogemos la imagen a partir de la dirección dada ($sDirImagen)
switch($vDatosImg[2]){
case IMAGETYPE_GIF:
$imgOrigen = imagecreatefromgif($sDirImagen);
break;
case IMAGETYPE_JPEG:
$imgOrigen = imagecreatefromjpeg($sDirImagen);
break;
case IMAGETYPE_PNG:
$imgOrigen = imagecreatefrompng($sDirImagen);
break;
case IMAGETYPE_SWF:
case IMAGETYPE_PSD:
case IMAGETYPE_BMP:
case IMAGETYPE_TIFF_II:
case IMAGETYPE_TIFF_MM:
case IMAGETYPE_JPC:
case IMAGETYPE_JP2:
case IMAGETYPE_JPX:
case IMAGETYPE_JB2:
case IMAGETYPE_SWC:
case IMAGETYPE_IFF:
return -11;
break;
case IMAGETYPE_WBMP:
$imgOrigen = imagecreatefromwbmp($sDirImagen);
break;
case IMAGETYPE_XBM:
$imgOrigen = imagecreatefromxbm($sDirImagen);
break;
default:
return -13;
break;
}
/*
Establecemos los tamaños:
- Si bEscalable viene como true.
Se multiplican los valores recibidos para ancho y alto
por el ancho y alto de la imagen,
así 0.5 sería la mitad de la imagen y 2 sería el doble
- Si bEscalable viene como false.
Los tamaños serán los pasados por ancho y alto directamente
- Si ancho o alto vienen como 0 o numero negativo,
el valor de esta propiedad será asignada proporcionalmente con
el valor de la otra.
- Si ancho y alto vienen como 0 o numero negativo, Error
*/
if (!(is_numeric($ancho)) || !(is_numeric($alto))) return -20;
if ($bEscalable){
if ($ancho > 0){
$ancho *= $vDatosImg[0];
if ($alto > 0) $alto *= $vDatosImg[1];
else $alto = $vDatosImg[1] * ($ancho / $vDatosImg[0]);
}else if ($alto > 0){
$alto *= $vDatosImg[1];
$ancho = $vDatosImg[0] * ($alto / $vDatosImg[1]);
}else{
return -21;
}
}else{
if (($ancho > 0) && ($alto < 1))
$alto = $vDatosImg[1] * ($ancho / $vDatosImg[0]);
else if (($alto > 0) && ($ancho < 1))
$ancho = $vDatosImg[0] * ($alto / $vDatosImg[1]);
else if (($alto < 1) && ($ancho < 1))
return -21;
}
// Se crea la nueva imagen redimensionada
if (function_exists("ImageCreateTrueColor"))
$imgDestino = ImageCreateTrueColor($ancho,$alto);
else
$imgDestino = ImageCreate($ancho,$alto);
ImageCopyResized ($imgDestino, $imgOrigen, 0, 0, 0, 0, $ancho, $alto, $vDatosImg[0], $vDatosImg[1]);
/*
Se envía la cabecera de los datos de la imagen.
Cuando llegue aquí no debe de haber sido enviado NADA.
Si se ha enviado algo, aunque fuera un "intro" o espacio daría error
*/
header("Content-type: ".$sTipo);
// Se pinta la imagen según el tipo
switch($vDatosImg[2]){
case IMAGETYPE_GIF:
imagegif($imgDestino);
break;
case IMAGETYPE_JPEG:
imagejpeg($imgDestino, $save_view);
break;
case IMAGETYPE_PNG:
imagepng($imgDestino);
break;
case IMAGETYPE_SWF:
case IMAGETYPE_PSD:
case IMAGETYPE_BMP:
case IMAGETYPE_TIFF_II:
case IMAGETYPE_TIFF_MM:
case IMAGETYPE_JPC:
case IMAGETYPE_JP2:
case IMAGETYPE_JPX:
case IMAGETYPE_JB2:
case IMAGETYPE_SWC:
case IMAGETYPE_IFF:
return -12;
break;
case IMAGETYPE_WBMP:
imagewbmp($imgDestino);
break;
case IMAGETYPE_XBM:
imagexbm($imgDestino);
break;
default:
return -13;
break;
}
imagedestroy($imgOrigen);
imagedestroy($imgDestino);
return 1;
}
function ErrorPintaImagenRedimensionada($iRetorno){
$sTexto1 = "";
$sTexto2 = "";
switch($iRetorno){
case -8:
$sTexto1 = "La dirección de la imagen dada no es válida";
break;
case -10:
$sTexto1 = "No se ha encontrado el tipo mime de la imagen";
$sTexto2 = "ni en sus cabeceras ni pasadas por parámetro";
break;
case -11:
$sTexto1 = "El tipo de la imagen dado no se puede redimensionar";
$sTexto2 = "Se recomiendan los tipos jpg, gif ó png";
break;
case -12:
$sTexto1 = "No es posible crear una imagen con el tipo dado";
$sTexto2 = "Se recomiendan los tipos jpg, gif ó png";
break;
case -13:
$sTexto1 = "El tipo mime no esta implementado";
$sTexto2 = "Se recomiendan los tipos jpg, gif ó png";
break;
case -20:
$sTexto1 = "Error en los parámetros pasados ancho (3º) ó alto(4º)";
$sTexto2 = "Los valores deben ser numéricos enteros o decimales";
break;
case -21:
$sTexto1 = "Error en los parámetros pasados ancho (3º) y alto(4º)";
$sTexto2 = "al menos uno de estos parámetros deben de ser positivos";
break;
default:
if ($iRetorno < 0) $sTexto1 = "Error desconocido";
break;
}
if ($sTexto1 != ""){
$imagen = imagecreate (400, 40);
$cFondo = imagecolorallocate ($imagen, 255, 226, 169);
$cTexto = imagecolorallocate ($imagen, 153, 102, 0);
imagefilledrectangle ($imagen, 0, 0, 150, 30, $cFondo);
if ($sTexto2 == ""){
imagestring ($imagen, 3, 5, 15, $sTexto1, $cTexto);
}else{
imagestring ($imagen, 3, 5, 5, $sTexto1, $cTexto);
imagestring ($imagen, 3, 5, 20, $sTexto2, $cTexto);
}
header("Content-type: image/png");
imagepng($imagen);
imagedestroy($imagen);
}
}
$iError = iPintaImagenRedimensionada("imagen.jpg", TRUE, 0.5, -1, IMAGETYPE_JPEG);
ErrorPintaImagenRedimensionada ($iError)
?>
Mi problema es que no logro mostrar el archivo creado en modifica.
He probado cambiar el imagejpeg poniendo la nueva direccion, se guardaba pero no me mostraba la imágen guarda.
Tambien probé usar move_upload_files pero al no haber enviado ningun formulario me daba error.
Traté de colocar cambiar el header("Content-type: ".$sTipo); por header('Location: index.php'); pero redireccionaba antes de crear y guardar la imágen. ¿como hago? Agradeceria la ayuda de cualquiera.