Прозрачность изображения и альфа при слиянии изображений с PHP

Поэтому я нашел код на PHP Doc и немного отредактировал его, чтобы объединить два изображения, которые у меня есть. Затем изображение сохраняется в папке на сервере. Однако есть небольшая проблема, и я не могу понять, почему это происходит.

Во-первых, мой код:

$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 ); 

Во-вторых, некоторая информация об изображениях:

  1. Оба изображения имеют одинаковый размер
  2. Образ «шаблон» – это только цвет блока / узор
  3. Изображение рамы имеет прозрачные части внутри рамки (чтобы позволить шаблону показывать)
  4. Область вокруг рамки – белая до его избыточного рисунка

Я надеялся, что, когда я наложил рамку на узор, из-за этих частей, что он создаст оконную раму со стеклянным рисунком внутри, а белый скроет оставшийся паттен.

Для иллюстрации я предоставил изображения. и что происходит.

Шаблон:

шаблон

Рамка:

Рамка

Результат:

результат

Как вы можете видеть, это не приводит к тому, что я ожидал. Может ли кто-нибудь сказать мне, где я ошибаюсь? Я хочу наложить рамку на узор, удерживая прозрачный центр и используя лишний белый цвет, чтобы покрыть остальную часть пантера. Любая помощь приветствуется.

Related of "Прозрачность изображения и альфа при слиянии изображений с PHP"

Обратите внимание, что ваш кадр имеет белые края, и если вам кажется, что окна должны быть обрезаны, вам нужно обрезать его и удалить добавленный ниже imagecolortransparent если вы не можете использовать этот

 $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); 

Вывод

введите описание изображения здесь

Вы также можете

 $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); 

Вывод

введите описание изображения здесь

Ваше изображение не прозрачно, как вы описали, попробуйте использовать это вместо этого, если я правильно понял, что вы описали. введите описание изображения здесь

также вы должны найти программу, которая не преобразует прозрачность в белый при сохранении (или проверяет параметры для этого), если вы действительно сделали эти прозрачные в первую очередь.