PHP - Redimensionar imagen para varias extensiones

 
Vista:

Redimensionar imagen para varias extensiones

Publicado por Sam (185 intervenciones) el 10/04/2015 12:39:41
Hola amigos miren, tengo un codigo que funciona muy bien para redimensionar imagenes, pero solo me

permite redimensionar con imagenes jpg , y lo que necesito es que me redimensione tanto jpg , como png , gif.

Pero no se como hacerlo.

He intentado coger el codigo que a continuacion os voy a poner y hacer dos clases y dentro de cada clase personalizar el codigo, uno para jpg y otro para png y nada, no funciona , solo me coge una extension.

No me detecta las dos o tres extensiones , segun la imagen que meta.

Si me pudieran ayudar les estaria muy agradecido.

Miren este es el codigo que tengo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
 
//Ruta de la imagen a redimensionar             
$filename = 'imgs/avatar.png';
 
//Porcentaje de reducción respecto del tamaño original
$percent = 0.1;
 
//Tipo de extension soportada
header('Content-Type: image/png');
 
//Generamos un nuevo tamaño
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
 
//Cargamos ...
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefrompng($filename);
 
//Redimensionamos
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
 
//mostramos el tamaño de la nueva imagen
imagepng($thumb);
 
//Liberamos memoria             
imagedestroy($thumb);
 
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Redimensionar imagen para varias extensiones

Publicado por Sam (185 intervenciones) el 10/04/2015 15:56:20
Hola de nuevo, yo mismo me respondo:

No se si es la solucion idonea, si no lo fuera agradeceria si alguien pudiera decirme una mas profesional u optimizada.

Bueno lo que se me ha ocurrido (y funciona) es:

coger este codigo que he puesto antes y meterlo dentro de una clase y hacer una segunda clase pero haciendo referencia a otra extension , es decir:

primera clase para jpg
segunda clase para png
tercera clase para gif

y acceder a una u otra clase mediante un if en el cual se diria:

si la imagen metida tiene una extension , por ejemplo png, llamar a la clase 2 que es la que corres ponde a png

Y eso es lo que se me ha ocurrido y funciona.



Ahora bien;

Si fuera posible que este script pudiese ser universal para varias extensiones, seria maravilloso.

Asi me ahorraria hacer un script para cada clase personalizado para cada extension de imagen.

Pero necesitaria que me ayudaran si es posible, si es que eso se pudiera hacer.



POr otro lado;

Decir que mi solucion , aunque funciona , no guarda en la carpeta una copia ya redimensionada por este sript.

Solo la muestra redimensionada en el navegador pero no guarda una copia de la misma , sustituyendola por la original, que es lo que deberia suceder.

Como digo cualquier ayuda seria de agradecer.


gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Alberto
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redimensionar imagen para varias extensiones

Publicado por Alberto (351 intervenciones) el 10/04/2015 18:26:29
Hola...

Efectivamente es una solución a tu problema, sin embargo, como bien dices se puede optimizar ya que al final de cuentas las tres Clases contienen el mismo proceso y su única variante es la extensión de la imagen. En este link puedes encontrar el código que necesitas para evitarte la creación de Clases, de esta manera sería la forma en que podemos optimizar tu problema...

http://casamadrugada.net/tutoriales/php/como-cambiar-el-tamano-a-una-imagen-con-php-y-libreria-gd/

Cualquier duda y/o comentario, aquí estamos. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Redimensionar imagen para varias extensiones

Publicado por Sam (185 intervenciones) el 10/04/2015 20:01:43
Mil gracias Alberto, me sirvio mucho.

He conseguido adaptarlo bien, y funciona salvo un pequeño detalle

Veras me inserta 2 imagenes en vez de una mira, lo tengo asi:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
function redimensionarImgs($avatar) {
 
    $ruta_imagen = "../../imgs/".$avatar;
 
    $miniatura_ancho_maximo = 32;
    $miniatura_alto_maximo = 32;
 
    $info_imagen = getimagesize($ruta_imagen);
    $imagen_ancho = $info_imagen[0];
    $imagen_alto = $info_imagen[1];
    $imagen_tipo = $info_imagen['mime'];
 
 
    $proporcion_imagen = $imagen_ancho / $imagen_alto;
    $proporcion_miniatura = $miniatura_ancho_maximo / $miniatura_alto_maximo;
 
    if ( $proporcion_imagen > $proporcion_miniatura ){
        $miniatura_ancho = $miniatura_ancho_maximo;
        $miniatura_alto = $miniatura_ancho_maximo / $proporcion_imagen;
    } else if ( $proporcion_imagen < $proporcion_miniatura ){
        $miniatura_ancho = $miniatura_ancho_maximo * $proporcion_imagen;
        $miniatura_alto = $miniatura_alto_maximo;
    } else {
        $miniatura_ancho = $miniatura_ancho_maximo;
        $miniatura_alto = $miniatura_alto_maximo;
    }
 
    switch ( $imagen_tipo ){
        case "image/jpg":
        case "image/jpeg":
            $imagen = imagecreatefromjpeg( $ruta_imagen );
            break;
        case "image/png":
            $imagen = imagecreatefrompng( $ruta_imagen );
            break;
        case "image/gif":
            $imagen = imagecreatefromgif( $ruta_imagen );
            break;
    }
 
    $lienzo = imagecreatetruecolor( $miniatura_ancho, $miniatura_alto );
 
    imagecopyresampled($lienzo, $imagen, 0, 0, 0, 0, $miniatura_ancho, $miniatura_alto, $imagen_ancho, $imagen_alto);
 
 
    imagejpeg($lienzo, "../../imgs/avatar.jpg", 80);
 
}
 
 
 
 
 
$avatar = $_FILES["avatar"]["name"];
$avatar = strtolower($avatar);
 
$avatar_peso = $_FILES['avatar']['size'];
 
$directorio = "../../imgs/";
 
 
$rutaDestino = $directorio . basename($avatar);
 
$extensionImagen = pathinfo($rutaDestino,PATHINFO_EXTENSION);
 
 
 
 
//CONTROLAR LA EXTENSIÓN DEL AVATAR
if($extensionImagen != "jpg" &&
    $extensionImagen != "png" &&
    $extensionImagen != "jpeg" &&
    $extensionImagen != "gif")
 
    {
        echo "Solo se permiten imagenes jpg, jpeg, png y gif.";
    }
 
else
 
if (move_uploaded_file($_FILES["avatar"]["tmp_name"], $rutaDestino))
 
    {
        echo "La imagen ". $avatar . " ha sido subida.";
 
        redimensionarImgs($avatar);
    }




forma 1: He intentado quitar este trozo (de esta manera inserta dos fotos) :

1
2
3
4
5
6
if (move_uploaded_file($_FILES["avatar"]["tmp_name"], $rutaDestino))
{
    echo "La imagen ". $avatar . " ha sido subida.";
 
    redimensionarImgs($avatar);
}



forma 2: y poner esto otro:

1
2
3
4
{
 
redimensionarImgs($avatar);
}



Pero no funciona.

solo funciona de la forma 1.

help please :-(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redimensionar imagen para varias extensiones

Publicado por Alberto (351 intervenciones) el 10/04/2015 20:24:26
Mira, amigo, tal y como lo tengo funciona correctamente, no me genera dos imagenes...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function redimensionarImgs($avatar) {
	$ruta_imagen = "img/".$avatar;
 
	$miniatura_ancho_maximo = 32;
	$miniatura_alto_maximo = 32;
 
	$info_imagen = getimagesize($ruta_imagen);
	$imagen_ancho = $info_imagen[0];
	$imagen_alto = $info_imagen[1];
	$imagen_tipo = $info_imagen['mime'];
 
 
	$proporcion_imagen = $imagen_ancho / $imagen_alto;
	$proporcion_miniatura = $miniatura_ancho_maximo / $miniatura_alto_maximo;
 
	if ( $proporcion_imagen > $proporcion_miniatura ){
		$miniatura_ancho = $miniatura_ancho_maximo;
		$miniatura_alto = $miniatura_ancho_maximo / $proporcion_imagen;
	} else if ( $proporcion_imagen < $proporcion_miniatura ){
		$miniatura_ancho = $miniatura_ancho_maximo * $proporcion_imagen;
		$miniatura_alto = $miniatura_alto_maximo;
	} else {
		$miniatura_ancho = $miniatura_ancho_maximo;
		$miniatura_alto = $miniatura_alto_maximo;
	}
 
	switch ( $imagen_tipo ){
		case "image/jpg":
		case "image/jpeg":
			$imagen = imagecreatefromjpeg( $ruta_imagen );
		break;
		case "image/png":
			$imagen = imagecreatefrompng( $ruta_imagen );
		break;
		case "image/gif":
			$imagen = imagecreatefromgif( $ruta_imagen );
		break;
	}
 
	$lienzo = imagecreatetruecolor( $miniatura_ancho, $miniatura_alto );
 
	imagecopyresampled($lienzo, $imagen, 0, 0, 0, 0, $miniatura_ancho, $miniatura_alto, $imagen_ancho, $imagen_alto);
 
	imagejpeg($lienzo, "./avatar.jpg", 80);
}
 
redimensionarImgs('imagen_prueba.png');

Posiblemente, si tienes ese error se debe a la forma en que estas subiendo los archivos al server, porque el código tal y como te lo eh proporcionado, funciona correcatmente.

Cualquier duda y/o comentario, aquí estamos. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar