Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/11/2014, 11:46
maquinistas1
 
Fecha de Ingreso: noviembre-2014
Ubicación: Galicia
Mensajes: 1
Antigüedad: 9 años, 5 meses
Puntos: 0
Pregunta Cambiar tamaño imágenes base de datos

Buenas tardes.
Me dirijo a vosotros con el fin de que si me podéis echar una mano con un tema de cambiar el ta,año de las imágenes que suban al servidor, a través de un formulario, y no evitar así, ir revisando cada imagen para cambiarla de tamaño, a 400*300, por ejemplo.
Lllevo días leyendo y revisando los post de otros compañeros de este mismo foro, y de otros sitios de internet, pero no lo doy logrado. Aprendo todo lo que puedo sobre php, y por ello, te pediría que me echaréis un cable.

1. Las imágenes suben al servidor, a través de un formulario
2. El mismo script, dónde está alojado del anterior formulario, se encarga de subir las imágenes correctamente a un campo llamado "imagen" en la base de datos, y no permite que suban más de una imagen llamadas con el mismo nombre:

<?php

$fecha = time();


//conexion a la base de datos
mysql_connect("") or die(mysql_error()) ;
mysql_select_db("") or die(mysql_error()) ;
$query=("SELECT * FROM categorias WHERE clave='12' ");
$result=mysql_query($query) or die ('Error en la carga de datos');
if (mysql_num_rows($result)>0)
echo"";
{
//comprobamos si ha ocurrido un error.
if ($_FILES["imagen"]["error"] > 0){
echo "<font color=\"white\">Cumplimente los datos requeridos</font>.
";
} else {
//ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
//y que el tamano del archivo no exceda los 100kb
$permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
$limite_kb = 150;

if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 10000){
//esta es la ruta donde copiaremos la imagen
$ruta = "imagenes/u/" . $_FILES['imagen']['name'];

//comprobamos si este archivo existe para no volverlo a copiar.
//pero si quieren pueden obviar esto si no es necesario.
//o pueden darle otro nombre para que no sobreescriba el actual.
if (!file_exists($ruta)){
//aqui movemos el archivo desde la ruta temporal a nuestra ruta
//usamos la variable $resultado para almacenar el resultado del proceso de mover el archivo
//almacenara true o false
$resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);
if ($resultado){
$nombre = $_FILES['imagen']['name'];

$resul = mysql_query("INSERT INTO imagenes (imagen, fecha) VALUES ('$nombre','".date("Y-m-d H:i:s")."')");
if(mysql_num_rows($result) > 0)
echo "<script language=\"javascript\">
window.location.href=\"correcto.php\";
</script>";

else

echo "<script language=\"javascript\">
window.location.href=\"correcto.php\";
</script>";


} else {
echo "<font color=\"white\">Ha ocurrido un error al enviar el formulario</font>";
}
} else {
echo $_FILES['imagen']['name'] . ",<font color=\"white\"> La imagen ya existe</font> ";
}
} else {
echo "<font color=\"white\">Imagen no permitida, es tipo de imagen prohibida o excede el tamaño de $limite_kb Kilobytes</font>";
}
}
}

?>


3. Ahora, he sacado el siguiente script, de un compañero de este mismo foro, y funciona a la perfección -si lo ejecuto sólo en el servidor- (he probado varios), al que llamaré redimensiona1.php:

<?php
$ruta='imagenes/u/IMG_1697.JPG';
$anchura=400;
$hmax=300;
$datos = getimagesize($ruta);
if($datos[2]==1){$img = @imagecreatefromgif($ruta);}
if($datos[2]==2){$img = @imagecreatefromjpeg($ruta);}
if($datos[2]==3){$img = @imagecreatefrompng($ruta);}
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb = imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
if($datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if($datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
imagedestroy($thumb);
?>

4. Lo que trato es adaptar el script de redimensiona1.php al script primero que os mostraba de subir las imágenes (que siempre me ha funcionado). Entonces al script primero, le añado las siguientes líneas

<?php

$fecha = time();


//conexion a la base de datos
mysql_connect("") or die(mysql_error()) ;
mysql_select_db("") or die(mysql_error()) ;
$query=("SELECT * FROM categorias WHERE clave='12' ");
$result=mysql_query($query) or die ('Error en la carga de datos');
if (mysql_num_rows($result)>0)
echo"";
{
//comprobamos si ha ocurrido un error.
if ($_FILES["imagen"]["error"] > 0){
echo "<font color=\"white\">Cumplimente los datos requeridos</font>.
";
} else {
//ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
//y que el tamano del archivo no exceda los 100kb
$permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
$limite_kb = 150;

if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 10000){
//esta es la ruta donde copiaremos la imagen
//recuerden que deben crear un directorio con este mismo nombre
//en el mismo lugar donde se encuentra el archivo subir.php
$ruta = "imagenes/u/" . $_FILES['imagen']['name'];

//comprobamos si este archivo existe para no volverlo a copiar.
//pero si quieren pueden obviar esto si no es necesario.
//o pueden darle otro nombre para que no sobreescriba el actual.
if (!file_exists($ruta)){
//aqui movemos el archivo desde la ruta temporal a nuestra ruta
//usamos la variable $resultado para almacenar el resultado del proceso de mover el archivo
//almacenara true o false
$resultado = @move_uploaded_file($_FILES["imagen"]["tmp_name"], $ruta);
if ($resultado){
$nombre = $_FILES['imagen']['name'];

include("redimensionar1.php");


$resul = mysql_query("INSERT INTO imagenes (imagen, fecha) VALUES ('$nombre','".date("Y-m-d H:i:s")."')");
if(mysql_num_rows($result) > 0)
echo "<script language=\"javascript\">
window.location.href=\"correcto.php\";
</script>";

else

echo "<script language=\"javascript\">
window.location.href=\"correcto.php\";
</script>";


} else {
echo "<font color=\"white\">Ha ocurrido un error al enviar el formulario</font>";
}
} else {
echo $_FILES['imagen']['name'] . ",<font color=\"white\"> La imagen ya existe</font> ";
}
} else {
echo "<font color=\"white\">Imagen no permitida, es tipo de imagen prohibida o excede el tamaño de $limite_kb Kilobytes</font>";
}
}
}

?>

5. Ahora cambio la primera línea del script redimensionar1.php a:

<?php
$ruta='imagenes/u/';
$anchura=400;
$hmax=300;
$datos = getimagesize($ruta);
if($datos[2]==1){$img = @imagecreatefromgif($ruta);}
if($datos[2]==2){$img = @imagecreatefromjpeg($ruta);}
if($datos[2]==3){$img = @imagecreatefrompng($ruta);}
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb = imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
if($datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if($datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
imagedestroy($thumb);
?>

6. Y el resultado es que si lo pruebo, y subo una imagen, esta misma imagen, sube perfectamente a la base de datos y al servidor, como siempre, pero no hace caso del include que incluyo en el primer script, y por ello sube la imagen pero NO redimensiona nada en absoluto.

7. Cómo sería la forma correcta de escribirlo para que que cuando suban las imágenes, funcione correctamente el script de redimensionar1.php.

8. La verdad, es que ya no se qué intentar: no sé pasar las variables.

9.Agradecería cualquier tipo de ayuda.

10.Muchas gracias