Foros del Web » Programando para Internet » PHP »

Dar color de fondo blanco o transparente a imagen redimensionada

Estas en el tema de Dar color de fondo blanco o transparente a imagen redimensionada en el foro de PHP en Foros del Web. Hola. Estoy creando una redimensión de imágenes por si un usuario las sube a un alto o ancho demasiado grande y que se adapte a ...
  #1 (permalink)  
Antiguo 05/11/2015, 11:50
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Dar color de fondo blanco o transparente a imagen redimensionada

Hola.

Estoy creando una redimensión de imágenes por si un usuario las sube a un alto o ancho demasiado grande y que se adapte a uno estandar establecido. Por ahora todo va bien sin embargo me gustaría crear un fondo blanco o transparente cuando las imágenes sean con un ancho menor al estandar y no en negro como sale ahora.

Lo he intentando añadiendo al siguiente código por ejemplo imagecolorallocate e imagefill y alguno que otro pero o sigue igual o reemplaza a la imagen a subir y se ve todo blanco:
Código PHP:
Ver original
  1. $color = imagecolorallocate ($img_reajustada,255,255,255);  
  2.  imagefill($img_reajustada, 0, 0, $color);

El código que tengo normal hasta ahora sin lo anterior es el siguiente:

Código PHP:
Ver original
  1. //para saber si la imagen tiene el ancho correcto que es de 420px y alto correcto de 315px
  2.         $tamano_img = getimagesize($imagen);
  3.         $ancho_img = $tamano_img[0];
  4.         $alto_img = $tamano_img[1];
  5.  
  6.         $ancho_img_deseado = 420;
  7.         $alto_img_deseado = 315;
  8.  
  9.         //Si el ancho de la imagen es mayor que el deseado o el alto de la imagen es mayor que el deseado
  10.         if($alto_img>$alto_img_deseado || $ancho_img>$ancho_img_deseado){
  11.  
  12.             //Compruebo si el alto de la imagen es mayor que el ancho lo reajusto sobre el alto.
  13.             if($ancho_img<$alto_img){              
  14.                
  15.                 //Por una regla de 3 obtengo el ancho de la imagen de manera proporcional al alto nuevo que será de 315
  16.                 $nuevo_alto_img = $alto_img_deseado;
  17.                 $nuevo_ancho_img = ($ancho_img/$alto_img)*$nuevo_alto_img;
  18.                 $ancho_final_img = 420;
  19.  
  20.                 //$img_reajustada = imagecreatetruecolor($nuevo_ancho_img,$nuevo_alto_img);
  21.                 $img_reajustada = imagecreatetruecolor($ancho_final_img,$nuevo_alto_img);
  22.                
  23.             }
  24.             //Fin Compruebo si el alto de la imagen es mayor que el ancho lo reajusto sobre el alto.
  25.             //Si el ancho de la imagen es mayor que 420px, reajusto su tamaño
  26.             else{
  27.                 //if($ancho_img>$ancho_img_deseado){
  28.                 //Por una regla de 3 obtengo el alto de la imagen de manera proporcional al ancho nuevo que será de 420
  29.                 $nuevo_ancho_img = $ancho_img_deseado;
  30.                 $nuevo_alto_img = ($alto_img/$ancho_img)*$nuevo_ancho_img;
  31.  
  32.                 $img_reajustada = imagecreatetruecolor($nuevo_ancho_img,$nuevo_alto_img);
  33.             }
  34.  
  35.                 //Creo una nueva imagen basada en la original, dependiendo de su extensión es el tipo que crearé.
  36.                 switch ($extension) {
  37.                     case '.jpg':
  38.                         $img_original = imagecreatefromjpeg($imagen);              
  39.                        
  40.                         //$nuevo_ancho_img = 236;
  41.                         $origenX = ($ancho_img_deseado - $nuevo_ancho_img)/2;
  42.                        
  43.                        
  44.                         imagecopyresampled($img_reajustada, $img_original, $origenX, 0, 0, 0, $nuevo_ancho_img, $nuevo_alto_img, $ancho_img, $alto_img);
  45.                         //Guardo la imagen reescalada en el servidor
  46.                         $nombre_img_ext = "../img/".$email.$extension;
  47.                         $nombre_img =  "../img/".$email;
  48.                         imagejpeg($img_reajustada,$nombre_img_ext,100);
  49.                     break
  50.                 }

El código sigue pero lo dejo hasta esa parque que es justo ahí dentro del switch donde tengo que aplicar lo nuevo o anterior pero por ahora no encuentro la manera.

¿Alguna idea o cambio? Saludos.
  #2 (permalink)  
Antiguo 05/11/2015, 14:30
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Dar color de fondo blanco o transparente a imagen redimensionada

Hola de nuevo.

Es curioso pero me acabo de dar cuenta que con el código anterior si me creaba un fondo blanco, no se si era la caché o algun otro error pero por ahora parece que funciona añadiendo de nuevo el código que dejé fuera anteriormente:

Código PHP:
Ver original
  1. case '.jpg':
  2.                         $img_original = imagecreatefromjpeg($imagen);              
  3.                         $color = imagecolorallocate ($img_reajustada,255,255,255);  
  4.                         imagefill($img_reajustada, 0, 0, $color);
  5.                         //$nuevo_ancho_img = 236;
  6.                         $origenX = ($ancho_img_deseado - $nuevo_ancho_img)/2;

No se si será la mejor manera de hacerlo pero por ahora funciona. Ahí lo dejo abierto por si aun así hay cosas que mejorar.

Saludos.

Etiquetas: blanco, color
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 14:13.