PHP - ¿ Redimensionar un PNG sin perder la transparencia ?

 
Vista:

¿ Redimensionar un PNG sin perder la transparencia ?

Publicado por David (20 intervenciones) el 29/05/2012 12:16:50
Hola!

Me he dado cuenta que cuando redimensiono una imagen PNG la transparencia (Si tiene) no aparece.

Este es el código:
http://www.bpaste.net/show/HDfqofOA0ZpxLvqHIGj8/

¿ Que necesito añadir/modificar para que salga la transperencia del PNG (si existe) ?

Mil gracias a todos!
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
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

¿ Redimensionar un PNG sin perder la transparencia ?

Publicado por xve (6935 intervenciones) el 29/05/2012 14:07:36
Hola David, ajunto el codigo de la pagina que comentas (http://www.bpaste.net/show/HDfqofOA0ZpxLvqHIGj8/):
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
$ancho_destino=$_GET["ancho_max"];          // Ancho máximo de la nueva imagen (thumbnail)
$alto_destino=$_GET["alto_max"];            // Alto máximo de la nueva imagen (thumbnail)
 
$imagen=$_GET["imagen"];                    // nombre de la imagen
 
$original = imagecreatefrompng($imagen);    //Abrir la imagen original
header("Content-type: image/png");
//Ahora necesitamos saber de que tamaño es la imagen original:
$ancho_original = imagesx($original);
$alto_original = imagesy($original);
 
if (($ancho_original <= $ancho_destino) && ($alto_original <= $alto_destino))
{
    imagepng($original);
}else{
    $alto_redimensionado = $ancho_destino * $alto_original / $ancho_original;   // Que el alto sea proporcional al ancho elegido
    $ancho_redimensionado = $alto_destino * $ancho_original / $alto_original;   // Que el ancho sea proporcional al alto elegido
    if ($alto_redimensionado <= $alto_destino)
    {
        // REDIMENSIONAR POR EL ALTO
        //Crear una imagen nueva (miniatura)
        $thumb = imagecreatetruecolor($ancho_destino,$alto_redimensionado);
        //A continuación vamos a copiar la imagen original en la imagen en miniatura:
        imagecopyresampled($thumb,$original,0,0,0,0,$ancho_destino,$alto_redimensionado,$ancho_original,$alto_original);
    }else{
        // REDIMENSIONAR POR EL ANCHO
 
        //Crear una imagen nueva (miniatura)
        $thumb = imagecreatetruecolor($ancho_redimensionado,$alto_destino);
 
        //A continuación vamos a copiar la imagen original en la imagen en miniatura:
        imagecopyresampled($thumb,$original,0,0,0,0,$ancho_redimensionado,$alto_destino,$ancho_original,$alto_original);
    }
    imagepng($thumb);                       //Por último, guardamos la imagen
    // Liberar memoria (destruir las imagenes creadas con imagecreateXXX)
    imagedestroy($original);
    imagedestroy($thumb);
}

Yo creo que le falta la instrucción imagecolortransparent():

Por ejemplo, si quieres que el color negro sea el transparente...
1
2
3
$black = imagecolorallocate($thumb, 0, 0, 0);
// Make the background transparent
imagecolortransparent($thumb, $black);

Espero que te sirva
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 un PNG sin perder la transparencia ?

Publicado por David (20 intervenciones) el 29/05/2012 14:52:54
Ok gracias le daré un vistazo!... ¿por que tiene que ser el color negro el transparente ?, es decir, transparente es transparente no?, como funciona esto?

Un saludo compañero!
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 xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

¿ Redimensionar un PNG sin perder la transparencia ?

Publicado por xve (6935 intervenciones) el 29/05/2012 15:37:11
Hola David, interpreto que al generar la imagen con imagecreatetruecolor(), no sabe que parte de la imagen tiene que ser transparente, por eso hay que indicárselo. Te he puesto el negro de ejemplo, pero si no indicas que color es el transparente, supongo que no sabe que partes de la imagen poner en modo transparente.
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 un PNG sin perder la transparencia ?

Publicado por David (20 intervenciones) el 29/05/2012 16:15:25
Comprendo.. pero.. o estoy echo un lio o necesito lo siguiente:

1- Comprobar si la imagen tiene transparencia o no.
2- Saber que color es el transparente.

¿ Como enfoco el tema ? hay algo k se me escapa...

Gracias!
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