script redimensionar imagenes gif’s y png’s transparentes
Este post es la continuación de redimensionar imagens gif y png transparentes
Ahora un ejemplo completo donde tenemos una función que nos pasan el string de una imagen y devolvemos ese string redimensionado. Esta preparado para utilizarse al recoger la información de un formulario con imagenes. Del Array $_FILES[] obtendremos el string de la imagen tal que así
-
-
$extensión=$_FILES[$nombre_Foto_Formulario]['type'];
-
-
$ancho=150;
-
-
//ahora llamamos a la funcion de redimensionar
-
-
$imagen_redimensionada=redimensionarImatge($stringConLaFoto,$extension,$ancho)
-
#************************************************************************************
-
# redimensionaImatge:
-
#
-
# Donada una imatge es redimensiona a l'amplada o alçada passades com a paràmetre.
-
# Si no se li passen les mesures, s'agafaran les dimensions de les variables
-
# globals, que es troben a l'inicialitzador, MIDA_IMATGE_AMPLADA i MIDA_IMATGE_ALCADA
-
#
-
# Autor: Marc + Cristian en controlzeta.net
-
# Fecha creacion: 24/04/08
-
-
# ultima modificacion 28/08/2008
-
#
-
#************************************************************************************
-
-
function redimensionarImatge($imatge,$extensio,$amplada=FALSE,$alcada=FALSE) {
-
$original = imagecreatefromstring($imatge);
-
$mides[] = imagesx($original); // $mides[0] ANCHURA
-
$mides[] = imagesy($original); // $mides[1] ALTURA
-
-
//echo '<br>AMPLADA R:'.$amplada;
-
//echo '<br>AMPLADA R:'.$alcada;
-
//echo '<br>AMPLADA:'.$mides[0];
-
//echo '<br>AMPLADA:'.$mides[1];
-
-
if ( !( ($mides[0]==$amplada or $amplada==FALSE) AND ($mides[1]== $alcada or $alcada==FALSE) ) ){ //comprueba Que no se redimendsione al mismo tamaño Critian 19-08-2008
-
-
if($amplada || $alcada) {
-
$midaHoritzontal = $amplada;
-
$midaVertical = $alcada;
-
-
if( $alcada && ($mides[0]>(2*$mides[1])) ) {
-
$midaHoritzontal = 100;
-
} elseif(!$alcada) {
-
$midaVertical = $mides[1];
-
}
-
} elseif($mides[0] <= MIDA_IMATGE_AMPLADA && $mides[1] <= MIDA_IMATGE_ALCADA) {
-
$midaHoritzontal = $mides[0];
-
$midaVertical = $mides[1];
-
$noRedimensionar = true;
-
} else {
-
$midaHoritzontal = MIDA_IMATGE_AMPLADA;
-
$midaVertical = MIDA_IMATGE_ALCADA;
-
}
-
}else{
-
$midaHoritzontal = $mides[0];
-
$midaVertical = $mides[1];
-
$noRedimensionar = true;
-
}
-
-
-
if($midaHoritzontal) {
-
$ratio = ($mides[0]/$midaHoritzontal);
-
} else {
-
$ratio = ($mides[1]/$midaVertical);
-
}
-
-
$thumb = imagecreatetruecolor($midaHoritzontal,$midaVertical);
-
-
switch($extensio) {
-
case 'image/pjpeg':
-
case 'image/jpeg':
-
imagecopyresampled($thumb,$original,0,0,0,0,$midaHoritzontal,$midaVertical,$mides[0],$mides[1]);
-
imagejpeg($thumb,'../tempImage');
-
break;
-
-
case 'image/gif':
-
case 'image/png':
-
$colorTransparancia=imagecolortransparent($original);// devuelve el color usado como transparencia o -1 si no tiene transparencias
-
if($colorTransparancia!=-1){ //TIENE TRANSPARENCIA
-
//unset($thumb);
-
//$thumb = imagecreatetruecolor($midaHoritzontal,$midaVertical);
-
-
$colorTransparente = imagecolorsforindex($original, $colorTransparancia); //devuelve un array con las componentes de lso colores RGB + alpha
-
$idColorTransparente = imagecolorallocatealpha($thumb, $colorTransparente['red'], $colorTransparente['green'], $colorTransparente['blue'], $colorTransparente['alpha']); // Asigna un color en una imagen retorna identificador de color o FALSO o -1 apartir de la version 5.1.3
-
-
imagefill($thumb, 0, 0, $idColorTransparente);// rellena de color desde una cordenada, en este caso todo rellenado del color que se definira como transparente
-
imagecolortransparent($thumb, $idColorTransparente); //Ahora definimos que en el nueva imagen el color transparente será el que hemos pintado el fondo.
-
imagecopyresampled($thumb,$original,0,0,0,0,$midaHoritzontal,$midaVertical,$mides[0],$mides[1]);// copia y redimensiona un trozo de imagen
-
//imagecopyresized
-
}
-
-
switch ($extensio){
-
case 'image/gif':
-
imagegif($thumb,'../tempImage');
-
break;
-
case 'image/png':
-
imagepng($thumb,'../tempImage');
-
break;
-
}
-
-
default:
-
imagecopyresampled($thumb,$original,0,0,0,0,$midaHoritzontal,$midaVertical,$mides[0],$mides[1]);
-
imagejpeg($thumb,'../tempImage');
-
-
break;
-
}
-
-
//Lliurem la memòria
-
-
}
-
-
//eliminació de la imatge del servidor
-
-
}
-
-
return $imatge;
-
-
}
En este escript no se tienen en cuenta la redimension de imagenes gif animadas.
Etiquetas: ejemplo completo php redimensionar imagenes, hacer miiaturas de las imagenes desde php incluyendo gi, hacer miniaturas de imagenes con fondo transparente gif, mini, redimensionar imagenes desde php, redimensionar imagenes gif con php desde mysql 5, redimensionar imagenes png con php
1 de Febrero de 2010 a las 2:09 am
Aupa,
Estoy redimensionando un png. Es una imágen de una camiseta. Lo que hay afuera de la camiseta es blanco y lo de dentro, transparente. Primero lo he intentado con mi propio script y la parte blanca la deja blanca pero lo transparente lo convierte en negro. He probado con el tuyo e igual. Se te ocurre alguna forma de solucionarlo, para que lo transparente salga transparente?
Gracias. Un saludo. jon
2 de Febrero de 2010 a las 10:36 am
Hola,
Has probado con la funcion imagecopyresized, sustituyedo a imagecopyresampled ?
Estas seguro que entra por las extensiones correctas?
has leido el otro post? http://blog.controlzeta.net/?tag=hacer-miniaturas-de-imagenes-con-fondo-transparente-gif
el escript funciona, prueba con otra imagen, existe alguna imagen que daba problemas.
tambien puedes verificar que la funcion de php imagecolortransparent te devuelva un color.
saludos,
Cristian
6 de Febrero de 2010 a las 8:39 pm
Aupa,
Gracias Cristina por tu pronta respuesta! Se agaradece.
Al final, lo he conseguido con imagecopyresampled y imagesavealpha.
Saludos,
Jon
15 de Abril de 2010 a las 6:26 pm
Aixo no funciona nano. Ho he provat de totes les maneres
15 de Abril de 2010 a las 6:26 pm
Escolta noi, aquest codi no funciona!
19 de Abril de 2010 a las 11:11 am
Puedes explicarnos cual es el error que te da? para poderte ayudar? el código lo tenemos funcionando en alguna página y funciona bien.
Puede ser error de la configuración del php, que no tengas la librería, o simplemente la imagen de entrada, no sea adecuada.
Si detallas que te pasa te ayudamos.
salutacions
12 de Octubre de 2011 a las 2:54 am
Ese codigo está más malo que el carrizo, todo da error, los if tienen errores de sintaxis, no aceptan los ";", no se porque se suben siempre codigos que nunca funcionan, de todas maneras gracias por el "intento de ayudar" y dar una mera idea de como redimensionar, realmente sospecho de su funcionamiento.
14 de Octubre de 2011 a las 3:56 pm
Pues funciona perfectamente y compila.... Como lo has copiado? Hay que darle a plain text, para copiarlo primero...
redimensiona imagenes.