2009-09-08 30 views
20

La situación es esta: tengo una pequeña foto de 50x50. También tengo una pequeña imagen transparente de 50x50 que contiene un cuadro para la imagen de 50x50, así que básicamente quiero poner la png transparente en la parte superior de la imagen y fusionar esas dos, lo que daría lugar a una tercera imagen que se parece a esto : http://img245.imageshack.us/i/50x50n.png¿Cómo combinar PNG transparente con imagen usando PHP?

Nota: No quiero hacer esto solo con HTML (lo logré escribiendo un plugin de javascript que ponía el png transparente encima de la imagen original).

Gracias.

Respuesta

29

Puede combinar las dos imágenes con la biblioteca PHP GD2.

Ejemplo:

<?php 
# If you don't know the type of image you are using as your originals. 
$image = imagecreatefromstring(file_get_contents($your_original_image)); 
$frame = imagecreatefromstring(file_get_contents($your_frame_image)); 

# If you know your originals are of type PNG. 
$image = imagecreatefrompng($your_original_image); 
$frame = imagecreatefrompng($your_frame_image); 

imagecopymerge($image, $frame, 0, 0, 0, 0, 50, 50, 100); 

# Save the image to a file 
imagepng($image, '/path/to/save/image.png'); 

# Output straight to the browser. 
imagepng($image); 
?> 
+0

Intenté esto pero mi marco transparente se puso blanco en el medio. ¿cuál es el problema? –

+0

es posible que desee agregar 'header ('Content-Type: image/png');' antes de la última línea para asegurarse de que se envía el tipo MIME correcto al navegador –

+0

Esto tampoco funcionó, tampoco parece guardar el canal alfa También intenté agregar el indicador de fusión alpha mencionado por el usuario a continuación. – Gazillion

4

Puede hacerlo usando ImageMagick :: Composite. La primera nota aportada por el usuario debería ser suficiente para captar el concepto.

8

Añadir imagealphablending($frame,true); antes imagecopymerge() si desea mantener PNG máxima transparencia marco sobre la imagen.

+3

La imagen sigue apareciendo con las áreas transparentes en blanco. – AVProgrammer

+1

Obtengo lo mismo. ¿Ha habido una solución para esto todavía? – Adam

Cuestiones relacionadas