Foros del Web » Programando para Internet » PHP »

Cambiar tamaño imágenes base de datos

Estas en el tema de Cambiar tamaño imágenes base de datos en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/11/2014, 11:46
 
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

Etiquetas: fecha, formulario, mysql, select, sql, tamaño, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:23.