Comunidad de diseño web y desarrollo en internet online

PHP crear png desde png con fondo transparente

Citar            
MensajeEscrito el 31 Oct 2014 07:01 pm
Muy buenas a todos.

Me pongo en contacto con vosotros para ver si alguien me puede echar una manita.

Resulta que tengo que crear una imagen png (a ser posible con transparencia, aunque también me vale con fondo blanco).

Tengo una clase creada, que reconoce el tipo de archivo que me han pasado y genero el png a partir de él.

El problema es que cuando le he pasado un png que tiene fondo transparente no me funciona correctamente.
Si le paso un jpg o el png que no tenga capas, funciona bien.

Pero si le paso un png que tenga capas, no me redimensiona correctamente la imagen.

Os pego el código:

Código PHP :

public function resize_new_width_transparence($img_base, $nueva_img, $nuevo_width, $nuevo_height, $tipo)
      {
         list($width_viejo, $height_viejo) = getimagesize($img_base);

         $ratio = 1;
      

         if ($height_viejo != 0)
         {
            $ratio = $width_viejo / $height_viejo;
            $this->view->firebug($ratio);
         }

         if( $ratio > 1)
         {
             $width = $nuevo_width;
             $height = $nuevo_width / $ratio;

             $x_destino = 0;
             $y_destino = ($nuevo_height - $height) / 2;
            $this->view->firebug($y_destino);
         }
         else
         {
             $width = $nuevo_height * $ratio;
             $height = $nuevo_height;

             $x_destino = ($nuevo_width - $width) / 2;
             $y_destino = 0;
         }

      

         if ($tipo == '.jpeg' || $tipo == '.jpg')
         {
            $aux = imagecreatefromjpeg($img_base);      
         }
         elseif ($tipo == '.gif')
         {
            $aux = imagecreatefromgif($img_base);
         }
         elseif ($tipo == '.png')
         {
            $aux = imagecreatefrompng($img_base);
         }

         $create_true_colors = imagecreatetruecolor($nuevo_width, $nuevo_height);

         imageantialias($create_true_colors, true);

         imagealphablending($create_true_colors, false);

         $transparency = imagecolorallocatealpha($create_true_colors, 255, 255, 255, 127);
         imagefill($create_true_colors, 0, 0, $transparency);

         imagecopyresampled($create_true_colors, $aux, $x_destino, $y_destino, 0, 0, $width, $height, $width_viejo, $height_viejo);

         imagesavealpha($create_true_colors, false);
         
         imagepng($create_true_colors, $nueva_img);      
      }


Si necesitáis que os cuente alguna cosa más me lo decís y os la comento.

Muchas gracias de antemano.

Un saludo,

Fran.

Por SeiyaJapon

54 de clabLevel



 

España

chrome
Citar            
MensajeEscrito el 03 Nov 2014 12:17 pm
Si en el servidor cuentas con Imageick úsalo. Para estas cosas es mejor que GD (que es la biblioteca que estás usando).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Nov 2014 09:57 am
Muchas gracias!
Comprobaré si lo tengo en servidor y si está, lo usaré.

Un saludo,

Fran.

Por SeiyaJapon

54 de clabLevel



 

España

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.