Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Redimensionar las imagenes al subirlas con php

hola mister , esta vez vengo con una pregunta mas comun que me ha surgido y pienso que es de mucho interes .. estaba subiendo las imagenes de un post a la web y resuta que a veces le cuesta un poco cargar las imagenes
mi pregunta es: podrias hacer un script o si hay alguna manera de aligerar el peso al subir las imagenes seria fantastico , gracias de nuevo mister un saludo !
Editado
0
Puntos
6805
Visitas
14
Resp
Por Antonio Design hace 74 meses
Principiante
Respuesta #1
buenas, vuelve a dejar el code que hemos tenido que restaurar la DB por temas del server, salu2
0
Puntos
Por alber hace 74 meses
Administrador
Respuesta #2
hola Alber lo vi en este articulo: http://www.alvaropita.es/redimensionar-imagen-con-php-y-gd/

lo que quiero es aplicarlo en el formulario de editar.php que al subir una imagen se rebaje la resolucion de la imagen a una medida inferior sin distorsionarse y que la original se borre


aqui te dejo el codigo de admin/borrar.php por si es aqui
<?php require_once('../conexion.php');

$menu='admin';

//Validación de rango y valores
if(!isset($_SESSION['iduser']) || rango($_SESSION['iduser'])!=10 || !isset($_GET['idpost'])) header('Location:'.$dato[0]);


$idpost=$_GET['idpost'];

//Eliminar imagenes [imagen]
$accion_imagenes="SELECT imagen FROM z_posts WHERE id=$idpost";
$consulta_imagenes=mysqli_query($conexion,$accion_imagenes);
$datos_imagenes=mysqli_fetch_assoc($consulta_imagenes);

if($datos_imagenes['imagen']!=''){
	$partesimg=explode('####', $datos_imagenes['imagen']);
	$cantidadimg=count($partesimg);
	for ($i=0; $i < $cantidadimg; $i++) { 
		//Poner la ruta donde se guardan las subidas
		unlink('../img/upload/'.$partesimg[$i]);
	}
}

mysqli_free_result($consulta_imagenes);



//BORRAR REGISTRO
$accion_nm = "DELETE FROM z_posts WHERE id=$idpost";
$consulta_nm = mysqli_query($conexion,$accion_nm) or die(mysqli_error());


header('Location:'.$dato[0].'admin/posts.php');


?>

sino es aqui indicame donde hay que aplicarlo para que al subir la imagen se redimendimensione a medida ej: ( si es 1000x1000 que se haga 500x500 .. sin tener que ser una medida especifica nose si me explique bien ...
espero tu respuesta mister gracias de antemano salu2.

0
Puntos
Por Antonio Design hace 74 meses
Principiante
Respuesta #3
aqui te dejo el script por si lo puedes implementar directamente
<?php
/*************************************
 * 
 ************************************/


	//Ruta de la imagen original
	$rutaImagenOriginal="./imagen/aprilia classic.jpg";
	
	//Creamos una variable imagen a partir de la imagen original
	$img_original = imagecreatefromjpeg($rutaImagenOriginal);
	
	//Se define el maximo ancho o alto que tendra la imagen final
	$max_ancho = 200;
	$max_alto = 200;
	
	//Ancho y alto de la imagen original
	list($ancho,$alto)=getimagesize($rutaImagenOriginal);
	
	//Se calcula ancho y alto de la imagen final
	$x_ratio = $max_ancho / $ancho;
	$y_ratio = $max_alto / $alto;
	
	//Si el ancho y el alto de la imagen no superan los maximos, 
	//ancho final y alto final son los que tiene actualmente
	if( ($ancho <= $max_ancho) && ($alto <= $max_alto) ){//Si ancho 
		$ancho_final = $ancho;
		$alto_final = $alto;
	}
	/*
	 * si proporcion horizontal*alto mayor que el alto maximo,
	 * alto final es alto por la proporcion horizontal
	 * es decir, le quitamos al alto, la misma proporcion que 
	 * le quitamos al alto
	 * 
	*/
	elseif (($x_ratio * $alto) < $max_alto){
		$alto_final = ceil($x_ratio * $alto);
		$ancho_final = $max_ancho;
	}
	/*
	 * Igual que antes pero a la inversa
	*/
	else{
		$ancho_final = ceil($y_ratio * $ancho);
		$alto_final = $max_alto;
	}
	
	//Creamos una imagen en blanco de tamaño $ancho_final  por $alto_final .
	$tmp=imagecreatetruecolor($ancho_final,$alto_final);	
	
	//Copiamos $img_original sobre la imagen que acabamos de crear en blanco ($tmp)
	imagecopyresampled($tmp,$img_original,0,0,0,0,$ancho_final, $alto_final,$ancho,$alto);
	
	//Se destruye variable $img_original para liberar memoria
	imagedestroy($img_original);
	
	//Definimos la calidad de la imagen final
	$calidad=95;
	
	//Se crea la imagen final en el directorio indicado
	imagejpeg($tmp,"./imagen/retoque.jpg",$calidad);
	
	/* SI QUEREMOS MOSTRAR LA IMAGEN EN EL NAVEGADOR
	 * 
	 * descomentamos las lineas 64 ( Header("Content-type: image/jpeg"); ) y 65 ( imagejpeg($tmp); ) 
	 * y comentamos la linea 57 ( imagejpeg($tmp,"./imagen/retoque.jpg",$calidad); )
	 */ 
	//Header("Content-type: image/jpeg");
	//imagejpeg($tmp);
	
	

?>
0
Puntos
Por Antonio Design hace 74 meses
Principiante
Respuesta #4
hola la optimización tenemos que hacerla al subir las imágenes en el fichero fotos.php (si no recuerdo mal), investiga un poco y me dejas por aquí el code para implementarlo

salu2
0
Puntos
Por alber hace 74 meses
Administrador
Respuesta #5
es el inc/editpage.php si no me equivoco aqui dejo el codigo:
<?php require_once('../conexion.php'); 


//Validar formulario
if(!isset($_POST['titulo']) || $_POST['titulo']=='' || $_POST['mensaje']=='') exit;

//Validación tipo imagen
if (isset($_FILES['imagen']['name']) && $_FILES['imagen']['name']!=''){


$nombre='';
$contarimagenes=count($_FILES['imagen']['name']);
for ($i=0; $i < $contarimagenes; $i++) {

//Validar tipo imagen
if($_FILES['imagen']['type'][$i]=='image/gif' || $_FILES['imagen']['type'][$i]=='image/jpg' || $_FILES['imagen']['type'][$i]=='image/jpeg' || $_FILES['imagen']['type'][$i]=='image/png'){

$nombre.=time().'_'.$_FILES['imagen']['name'][$i].'####';
$nombreupload=time().'_'.$_FILES['imagen']['name'][$i];
move_uploaded_file($_FILES['imagen']['tmp_name'][$i], '../img/upload/'.$nombreupload);
}

}
$nombre=substr($nombre,0,-4);

} else $nombre='';




	//Actualizar el post
	//$_SESSION['imagenes']
	$accion_editar = sprintf("UPDATE z_paginas SET titulo=%s, precio=%s, kilometraje=%s, matriculacion=%s, potencia=%s, combustible=%s, cambio=%s, descripcion=%s,imagen=%s WHERE pagina=%s",
		formatearcadena($_POST['titulo'],'text'),
        formatearcadena($_POST['precio'], "text"),
        formatearcadena($_POST['kilometraje'], "text"),
        formatearcadena($_POST['matriculacion'], "text"),
        formatearcadena($_POST['potencia'], "text"),
        formatearcadena($_POST['combustible'], "text"),
        formatearcadena($_POST['cambio'], "text"),
		formatearcadena(trim($_POST['mensaje']),'text'),
		formatearcadena($_SESSION['imagenes'],'text'),
		formatearcadena($_POST['pagina'],'text'));

	$consulta_editar = mysqli_query($conexion,$accion_editar) or die(mysqli_error());



 echo $dato[0].$_POST['pagina'];


?>
0
Puntos
Por Antonio Design hace 74 meses
Principiante
Respuesta #6
o el inc/addpost.php no se cual podria ser aqui lo dejo entero:
<?php require_once('../conexion.php'); 


//Validar formulario
if(!isset($_POST['titulo']) || $_POST['titulo']=='' || $_POST['precio']=='' || $_POST['kilometraje']=='' || $_POST['matriculacion']=='' || $_POST['potencia']=='' || $_POST['combustible']=='' || $_POST['cambio']=='' || $_POST['categoria']=='' || $_POST['mensaje']=='') exit;

//Validación tipo imagen
if (isset($_FILES['imagen']['name']) && $_FILES['imagen']['name']!=''){


$nombre='';
$contarimagenes=count($_FILES['imagen']['name']);
for ($i=0; $i < $contarimagenes; $i++) {

//Validar tipo imagen
if($_FILES['imagen']['type'][$i]=='image/gif' || $_FILES['imagen']['type'][$i]=='image/jpg' || $_FILES['imagen']['type'][$i]=='image/jpeg' || $_FILES['imagen']['type'][$i]=='image/png'){

$nombre.=time().'_'.$_FILES['imagen']['name'][$i].'####';
$nombreupload=time().'_'.$_FILES['imagen']['name'][$i];
move_uploaded_file($_FILES['imagen']['tmp_name'][$i], '../img/upload/'.$nombreupload);
}

}
$nombre=substr($nombre,0,-4);

} else $nombre='';




if(!isset($_POST['idpost'])){
	//Insertar post
	$accion_adduser = sprintf("INSERT INTO z_posts (titulo, precio, kilometraje, matriculacion, potencia, combustible, cambio, categoria, mensaje, imagen, autor, seo) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
		formatearcadena($_POST['titulo'],'text'),
        formatearcadena($_POST['precio'], "text"),
        formatearcadena($_POST['kilometraje'], "text"),
        formatearcadena($_POST['matriculacion'], "text"),
        formatearcadena($_POST['potencia'], "text"),
        formatearcadena($_POST['combustible'], "text"),
        formatearcadena($_POST['cambio'], "text"), 
		formatearcadena($_POST['categoria'],'int'),
		formatearcadena(trim($_POST['mensaje']),'text'),
		formatearcadena($_SESSION['imagenes'],'text'),
		formatearcadena($_SESSION['iduser'],'int'),                     
		formatearcadena(urls_amigables($_POST['titulo']),'text'));

	$consulta_adduser = mysqli_query($conexion,$accion_adduser) or die(mysqli_error());


 $idpost=mysqli_insert_id($conexion);
} else {


	//Actualizar el post
	//$_SESSION['imagenes']
	$accion_editar = sprintf("UPDATE z_posts SET titulo=%s, precio=%s, kilometraje=%s, matriculacion=%s, potencia=%s, combustible=%s, cambio=%s, categoria=%s, mensaje=%s, imagen=%s, seo=%s WHERE id=%s",
		formatearcadena($_POST['titulo'],'text'),
        formatearcadena($_POST['precio'], "text"),
        formatearcadena($_POST['kilometraje'], "text"),
        formatearcadena($_POST['matriculacion'], "text"),
        formatearcadena($_POST['potencia'], "text"),
        formatearcadena($_POST['combustible'], "text"),
        formatearcadena($_POST['cambio'], "text"), 
		formatearcadena($_POST['categoria'],'int'),
		formatearcadena(trim($_POST['mensaje']),'text'),
		formatearcadena($_SESSION['imagenes'],'text'),
		formatearcadena(urls_amigables($_POST['titulo']),'text'),
		formatearcadena($_POST['idpost'],'int'));

	$consulta_editar = mysqli_query($conexion,$accion_editar) or die(mysqli_error());

$idpost=$_POST['idpost'];
}




//ACTUALIZAR REGISTRO
$accion_seo = sprintf("UPDATE z_posts SET seo=%s WHERE id=$idpost",
	formatearcadena($idpost.'-'.urls_amigables($_POST['titulo']),'text'));


$consulta_seo = mysqli_query($conexion,$accion_seo) or die(mysqli_error());



 echo $dato[0].'post/'.$idpost.'-'.urls_amigables($_POST['titulo']);


?>
0
Puntos
Por Antonio Design hace 74 meses
Principiante
Respuesta #7
espero tu respuesta mister salu2
0
Puntos
Por Antonio Design hace 74 meses
Principiante
Respuesta #8
eh publicado un ejemplo mas completo y con explicaciones para que puedas implementarlo super fácil https://datoweb.com/post/2921/como-redimensionar-o-reducir-peso-de-imagenes-con-php
0
Puntos
Por alber hace 74 meses
Administrador
Respuesta #9
en el fichero inc/editpage.php cambia esto:
move_uploaded_file($_FILES['imagen']['tmp_name'][$i], '../img/upload/'.$nombreupload);
por esto:
//Parámetros optimización, resolución máxima permitida
$max_ancho = 1280;
$max_alto = 900;

$medidasimagen= getimagesize($_FILES['imagen']['tmp_name'][$i]);

//Si las imagenes tienen una resolución y un peso aceptable se suben tal cual
if($medidasimagen[0] < 1280 && $_FILES['imagen']['size'][$i] < 100000){


move_uploaded_file($_FILES['imagen']['tmp_name'][$i], '../img/upload/'.$nombreupload);
} else {

$nombrearchivo=$nombreupload;

//Redimensionar
$rtOriginal=$_FILES['imagen']['tmp_name'][$i];

if($_FILES['imagen']['type'][$i]=='image/jpeg'){
$original = imagecreatefromjpeg($rtOriginal);
}
else if($_FILES['imagen']['type'][$i]=='image/png'){
$original = imagecreatefrompng($rtOriginal);
}
else if($_FILES['imagen']['type'][$i]=='image/gif'){
$original = imagecreatefromgif($rtOriginal);
}

 
list($ancho,$alto)=getimagesize($rtOriginal);

$x_ratio = $max_ancho / $ancho;
$y_ratio = $max_alto / $alto;


if( ($ancho <= $max_ancho) && ($alto <= $max_alto) ){
    $ancho_final = $ancho;
    $alto_final = $alto;
}
elseif (($x_ratio * $alto) < $max_alto){
    $alto_final = ceil($x_ratio * $alto);
    $ancho_final = $max_ancho;
}
else{
    $ancho_final = ceil($y_ratio * $ancho);
    $alto_final = $max_alto;
}

$lienzo=imagecreatetruecolor($ancho_final,$alto_final); 

imagecopyresampled($lienzo,$original,0,0,0,0,$ancho_final, $alto_final,$ancho,$alto);
 
//imagedestroy($original);
 
$cal=8;

if($_FILES['imagen']['type'][$i]=='image/jpeg'){
imagejpeg($lienzo,"../img/upload/".$nombrearchivo);
}
else if($_FILES['imagen']['type'][$i]=='image/png'){
imagepng($lienzo,"../img/upload/".$nombrearchivo);
}
else if($_FILES['imagen']['type'][$i]=='image/gif'){
imagegif($lienzo,"../img/upload/".$nombrearchivo);
}

}
prueba y nos cuentas
0
Puntos
Por alber hace 74 meses
Administrador
Respuesta #10
obviamente para probar el código de arriba tienes que editar un post ya creado para que se ejecute, cuando lo confirmes te preparo el del otro fichero pero vamos, la idea es echarnos una mano no hacernos el trabajo "íntegro" xd

salu2
0
Puntos
Por alber hace 74 meses
Administrador
Respuesta #11
hola ya tienes aquí el ejemplo solo falta que me cuentes si te funciona para hacerte el otro cacho ;)
0
Puntos
Por alber hace 74 meses
Administrador
Respuesta #12
hola alber , hice lo que me has dicho y funciona pero no me cambia el tamaño .. será que es el otro archivo inc/tiemporeal.php es similar a este .. aqui el codigo:
<?php require_once('../conexion.php'); 



if (isset($_FILES['imagenupload']['name']) && $_FILES['imagenupload']['name']!=''){


$nombre='';
$contarimagenes=count($_FILES['imagenupload']['name']);
for ($i=0; $i < $contarimagenes; $i++) {

//Validar tipo imagen
if($_FILES['imagenupload']['type'][$i]=='image/gif' || $_FILES['imagenupload']['type'][$i]=='image/jpg' || $_FILES['imagenupload']['type'][$i]=='image/jpeg' || $_FILES['imagenupload']['type'][$i]=='image/png'){

$nombre.=time().'_'.$_FILES['imagenupload']['name'][$i].'####';
$nombreupload=time().'_'.$_FILES['imagenupload']['name'][$i];
move_uploaded_file($_FILES['imagenupload']['tmp_name'][$i], '../img/upload/'.$nombreupload);
}

}
$nombre=substr($nombre,0,-4);

if($_SESSION['imagenes']!='') $_SESSION['imagenes'].='####'.$nombre; else $_SESSION['imagenes'].=$nombre;



$imagenes=$nombre;
$partes=explode('####',$imagenes);
$cantidad=count($partes);


}



?>
<?php if($imagenes!=''){ ?>

			
		<?php for ($i=0; $i < $cantidad; $i++) { ?>		
			
			<div class="relativo" id="elemento<?php echo $i.'bucle2'; ?>">
			<img style="width: 100px; height: auto" src="<?php echo $dato[0] ?>img/upload/<?php echo $partes[$i]; ?>" alt="">  
			<span onclick="eliminar_imagen('<?php echo $i.'bucle2'; ?>','<?php echo $partes[$i]; ?>');">&times;</span>	
			</div>
			


			<?php } ?>  	

<?php } ?>
0
Puntos
Por Antonio Design hace 74 meses
Principiante
Respuesta #13
está funcionando pero el tamaño de las imagenes sigue igual , si podrias hablar con zeus el lo sabria seguro por ser su web .. me urge mucho porque todo va de maravilla menos las imagenes que cargan muy lento .. quedo atento a tus respuestas gracias maestro !
0
Puntos
Por Antonio Design hace 74 meses
Principiante
Respuesta #14
claro el tema es que en tu web tienes muchos ficheros que suben imagenes y tendrías que meter la función en todos, envía un correo a info@datoweb.com que te den presupuesto de hacerlo todo por ti

salu2
0
Puntos
Por alber hace 74 meses
Administrador
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate