PHP – Marca de agua PNG Transparencia / Alfa

Sé que esto se ha cubierto MUCHAS veces, pero sigo intentando diferentes scripts y modificando el que tengo, y aún no puedo obtener mi marca de agua PNG-24 transparente en la parte superior de mi imagen principal.

Esto es lo que tengo actualmente:

 

Acabo de leer otra pregunta SO y una de las respuestas indicó que no será transparente si no agrega estas dos líneas:

 imagealphablending($image, false); imagesavealpha($image, true); 

Los agregué y todavía no. Intenté configurar los encabezados y la salida a PNG, pero todavía no tuve suerte. Cargué la marca de agua en mi navegador (en bruto) y definitivamente es transparente, pero no en la imagen. Sin duda, esto no puede ser tan difícil? ¿Alguna idea de lo que estoy haciendo mal?

No es un problema con el código de la aplicación, es con la imagen de marca de agua (PNG).

Muchos ejemplos / tutoriales sobre marcas de agua dicen que imagecopymerge usar una marca de agua PNG-24, pero de acuerdo con un blog que acabo de leer, dicen que imagecopymerge no trata muy bien con los archivos PNG-24, por lo tanto, usa PNG-8 y algunos configuración especial ‘Guardar para Web’. Hice esto y funciona bien ahora.

Aquí está la sección relevante sobre tipos de PNG de este blog :

La imagen de marca de agua debe estar en uno de los siguientes formatos recomendados:

  • PNG-8 (recomendado)
    Colores: 256 o menos
    Transparencia: encendido / apagado
  • GIF
    Colores: 256 o menos
    Transparencia: encendido / apagado
  • JPEG
    Colores: color verdadero
    Transparencia: n / a

La función imagecopymerge no maneja adecuadamente las imágenes PNG-24; por lo tanto, no es recomendable.

Si está utilizando Adobe Photoshop para crear imágenes de marca de agua, se recomienda que utilice el comando “Guardar para Web” con la siguiente configuración:

 File Format: PNG-8, non-interlaced Color Reduction: Selective, 256 colors Dithering: Diffusion, 88% Transparency: On, Matte: None Transparency Dither: Diffusion Transparency Dither, 100% 

Y para los beneficios de otros, este es el código de marca de agua que tengo que funciona:

  

Después de leer un poco más ( este comentario sobre el mismo artículo), descubrí que PUEDE usar filigranas PNG-24 pero con imagecopy lugar de imagecopymerge . Puedes reemplazar esta línea:

 imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100); 

Con este:

 imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); 

Usar imagecopymerge con marcas de agua PNG-8 es bastante bueno para marcas de agua “sobre la marcha”, ya que el archivo de marca de agua es muy pequeño. Si hace marcas de agua ‘detrás de escena’, en realidad no importa el tamaño del archivo y puede obtener una calidad mucho mejor de la marca de agua PNG-24, utilizando la imagecopy .

Espero que esto ayude a las marcas de agua confundidas por ahí.