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

Optimizar imágenes con php y reducir su tamaño y peso

En el siguiente ejemplo vemos como redimensionar o reducir peso de imágenes con php. Básicamente esta función optimiza las imágenes para que tengan un mejor tiempo de carga en nuestra pagina web, para comprender como funciona este código es muy recomendable prestar atención a los comentarios que hay implementados en cada parte.

Primero vamos con el código php:
<?php 
if(isset($_FILES['images'])){

//Funciones optimizar imagenes



//Ruta de la carpeta donde se guardarán las imagenes
$patch='imagenes';


//Parámetros optimización, resolución máxima permitida
$max_ancho = 1280;
$max_alto = 900;


if($_FILES['images']['type']=='image/png' || $_FILES['images']['type']=='image/jpeg' || $_FILES['images']['type']=='image/gif'){
	

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

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

	$nombrearchivo=$_FILES['images']['name'];
	move_uploaded_file($_FILES['images']['tmp_name'], $patch.'/'.$nombrearchivo);
	
}


//Si no, se generan nuevas imagenes optimizadas
else {

$nombrearchivo=$_FILES['images']['name'];

//Redimensionar
$rtOriginal=$_FILES['images']['tmp_name'];

if($_FILES['images']['type']=='image/jpeg'){
$original = imagecreatefromjpeg($rtOriginal);
}
else if($_FILES['images']['type']=='image/png'){
$original = imagecreatefrompng($rtOriginal);
}
else if($_FILES['images']['type']=='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['images']['type']=='image/jpeg'){
imagejpeg($lienzo,$patch."/".$nombrearchivo);
}
else if($_FILES['images']['type']=='image/png'){
imagepng($lienzo,$patch."/".$nombrearchivo);
}
else if($_FILES['images']['type']=='image/gif'){
imagegif($lienzo,$patch."/".$nombrearchivo);
}

}

	}
	else echo 'fichero no soportado';

}
?>
Formulario html
<form action="" method="post" class="formulario" enctype="multipart/form-data">

<div class="formulario-grupo">
	<label for="images">Cargar imagen</label>
	<input type="file" name="images" id="images" accept="image/*">	
</div>

<div class="formulario-grupo">
	<input type="submit" value="Upload File" class="boton">
</div>

</form>
descargar el ejemplo completo
Editado
3
Puntos
792
Visitas
6
Resp
Por alber hace 6 meses
Administrador
Respuesta #1
gracias por contestar mister .. una pregunta me podrias mandar el codigo integro dentro de la web responsive si no te importa pero no consigo que funcione gracias x todo maestro !
0
Puntos
Por Antonio Design hace 6 meses
Principiante
Respuesta #2
He probado en en subida.php y no me funciona , me podrias decir donde ponerlo ? Gracias
0
Puntos
Por Antonio Design hace 6 meses
Principiante
Respuesta #3
Antonio hazme un favor, descarga el ejemplo completo y ponlo dentro de tu htdocs como un proyecto a parte del tuyo y lo pruebas. .

despues me dices si te funciona mas que nada para descartar si tienes problema en las carpetas
0
Puntos
Por alber hace 6 meses
Administrador
Respuesta #4
Hola alber .. he probado tu ejemplo y va perfecto

lo que quiero es meterlo dentro de la web responsive que tengo de vosotros nada mas .. luego ya lo edito yo y lo adapto nose si me he explicado bien gracias crak !
0
Puntos
Por Antonio Design hace 6 meses
Principiante
Respuesta #5
los cursos no son mios son de zeuskx yo solo soy colaborador del foro y por lo que comentas lo que necesitas es que te implementen el código

entonces lo ideal es que no comentes en este hilo que el código no te funciona si no que mas bien no eres capaz de implementarlo

salu2
0
Puntos
Por alber hace 6 meses
Administrador
Respuesta #6
Buenas alber , gracias por contestar .. dije q no me funcinaba donde lo puse yo jeje .. solo quiero meterlo en la web responsive de zeuskx y nose cual fichero es y como hacerlo .. me podrias hechar una mano ? Gracias por todo mister !
0
Puntos
Por Antonio Design hace 6 meses
Principiante
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate