Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

204
Views
Combinar dos imágenes.png a salida.png usando gd

He estado tratando de fusionar dos imágenes usando gd lib. Una tarjeta (fondo) y un marco "nuevo" para esa tarjeta (primer plano, con el centro transparente).

Este es mi código:

 <?php $card = imagecreatefrompng('img/folder1/card.png'); $frame = imagecreatefrompng('img/folder2/frame.png'); list($width,$height) = getimagesize($frame); imagealphablending($card, true); imagesavealpha($card, true); imagecopy($card, $frame, 0, 0, 0, 0, $width, $height, 100); header('Content-Type: image/png'); imagepng($card);

Obtengo una salida, pero es solo la tarjeta sin el marco.

Saludos cordiales, ZF

Editar (12 horas después): descubrí por qué mi salida es solo la tarjeta (fondo), independientemente de mis cambios.

Eliminé el último valor 100 después de $height :

 imagecopy($card, $frame, 0, 0, 0, 0, $width, $height);

Ahora mi salida es solo frame.png . No importa si uso ImageAlphaBlending .

Pero sé que card.png definitivamente está debajo de frame.png , porque moví el frame.png hacia un lado en un eje, y card.png se vuelve visible. Por lo tanto, falla al fusionar las imágenes, respetando la transparencia de frame.png

Si guardo la salida en un archivo, es un .png transparente aunque.

¿Es imagecopy incluso adecuada para fusionar frame.png con un centro transparente en un fondo ( card.png )?

Editar: ¡Perdón por el desorden! Estaba trabajando con dos versiones al mismo tiempo. Ahora he limpiado mi espacio de trabajo actual y he escrito una nueva versión desde cero.

Eliminé el 100 después de $height en la versión que publiqué aquí:

 imagecopy($card, $frame, 0, 0, 0, 0, $width, $height);

Aclaración de la edición anterior: Nada cambió en absoluto. La salida seguía siendo solo card.png .

PERO el código de mi nueva versión es ( Final & Working ):

 <?php $card = imagecreatefrompng('img/folder1/card.png'); $frame = imagecreatefrompng('img/folder2/frame.png'); $width = "402"; $height = "599"; imagealphablending($card, true); imagesavealpha($card, true); imagecopy($card, $frame, 0, 0, 0, 0, $width, $height); header('Content-Type: image/png'); imagepng($card); imagedestroy($card); imagedestroy($frame);

Como puede notar, codifiqué el ancho y la altura de la imagen. En lugar de usar getimagesize

 list($width,$height) = getimagesize($frame);

Verifiqué la salida de $width , $height antes y son correctos, pero ese parecía ser mi problema. Si alguien tiene una respuesta a eso, ¡no dude en explicarla!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Abandoné el proyecto durante bastante tiempo. Como sugirió Maik , podría haber sido un problema de formato .png.

Qué decir... el consejo, y por tanto el conocimiento, viene con el tiempo:

De hecho, el error no fue producido por getimagesize y no es necesario codificar el tamaño de la imagen.

Era un problema de formato de imagen simple.

La "Nueva Versión" mencionada que escribí desde cero simplemente usó diferentes imágenes .png con el formato correcto.

Simplemente no sabía esto en ese momento, porque aparentemente obtuve la misma imagen del creador, pero han sido diferentes representaciones y, por lo tanto, diferentes tipos de formato.

Vota a favor de Maik y verifica tu tipo de formato .png (tipo 3).

Editar: Ah, y tal vez eche un vistazo a imagick;)

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!