transparente marca imagecreatetruecolor imagecopymerge agua php image image-processing gd mask

marca - Transparencia de imagen y alfa al fusionar imágenes con PHP



marca de agua php transparente (2)

Su imagen no es transparente como lo describió, intente usar esto si entendí lo que describió correctamente.

también debería encontrar un programa que no transforme la transparencia en blanco al guardar (o buscar opciones con respecto a esto) si realmente los hizo transparentes en primer lugar.

Así que encontré un código en PHP Doc, y lo edité ligeramente para unir dos imágenes que tengo. La imagen se guarda en una carpeta en el servidor. Sin embargo, hay un pequeño problema y no puedo entender por qué está sucediendo.

Primero mi código:

$glassurl = $_GET[''GlassImg'']; $frameurl = $_GET[''FrameImg'']; $filename = (int)date("H:i:s"); $src = imagecreatefromgif($frameurl); $dest = imagecreatefromjpeg($glassurl); imagecolortransparent($src, imagecolorat($src, 0, 0)); imagealphablending($dest, false); imagesavealpha($dest, true); imagealphablending($src, false); imagesavealpha($src, true); $src_x = imagesx($src); $src_y = imagesy($src); imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100); // Output and free from memory imagepng($dest, ''uploads/imagetest.png''); imagegif($dest); imagedestroy($dest); imagedestroy($src );

En segundo lugar, algo de información sobre las imágenes:

  1. Ambas imágenes son exactamente del mismo tamaño
  2. La imagen ''patrón'' es solo un bloque de color / patrón
  3. La imagen del marco tiene partes transparentes dentro del marco (para permitir que se muestre el patrón)
  4. El área alrededor del marco es blanca para acomodar el patrón de exceso

Esperaba que cuando superpusiera el marco al patrón debido a estas partes produciría un marco de ventana, con el patrón de vidrio adentro, y el blanco ocultaría el resto del patten.

Para ilustrar, he proporcionado las imágenes. y que pasa.

Patrón:

Marco:

Resultado:

Como puede ver, no da como resultado lo que esperaba. ¿Puede alguien decirme por favor dónde me estoy equivocando? Quiero superponer el marco en el patrón, manteniendo el centro transparente y usando el exceso de blanco para cubrir el resto del patrón. Cualquier ayuda es muy apreciada.


Tenga en cuenta que su marco tiene bordes blancos y si todavía quiere que las ventanas estén vacías, debe recortarlo y eliminar el agregado de imagecolortransparent la imagecolortransparent agregado a continuación, de lo contrario, puede usarlo.

$imgl = "thumb/pattern.png"; $img2 = "thumb/frame.png"; $dest = imagecreatefrompng($imgl); $src = imagecreatefrompng($img2); imagecolortransparent($src, imagecolorat($src, 0, 0)); $src_x = imagesx($src); $src_y = imagesy($src); imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100); // Output and free from memory header(''Content-Type: image/png''); imagegif($dest); imagedestroy($dest); imagedestroy($src);

Salida


También puedes tener

$imgl = "thumb/pattern.png"; $img2 = "thumb/frame.png"; $dest = imagecreatefrompng($imgl); $src = imagecreatefrompng($img2); $src_x = imagesx($src); $src_y = imagesy($src); $srcNew = imagecreatetruecolor($src_x, $src_y); ImageColorTransparent($srcNew, imageColorAllocate($srcNew, 0, 0, 0)); imagecopy($srcNew, $src, 70, 50, 78, 60, 473, 293); imagecopymerge($dest, $srcNew, 0, 0, 0, 0, $src_x, $src_y, 100); header(''Content-Type: image/png''); imagegif($dest); imagedestroy($dest); imagedestroy($src);

Salida