Поэтому я нашел код на 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 );
Во-вторых, некоторая информация об изображениях:
Я надеялся, что, когда я наложил рамку на узор, из-за этих частей, что он создаст оконную раму со стеклянным рисунком внутри, а белый скроет оставшийся паттен.
Для иллюстрации я предоставил изображения. и что происходит.
Шаблон:
Рамка:
Результат:
Как вы можете видеть, это не приводит к тому, что я ожидал. Может ли кто-нибудь сказать мне, где я ошибаюсь? Я хочу наложить рамку на узор, удерживая прозрачный центр и используя лишний белый цвет, чтобы покрыть остальную часть пантера. Любая помощь приветствуется.
Обратите внимание, что ваш кадр имеет белые края, и если вам кажется, что окна должны быть обрезаны, вам нужно обрезать его и удалить добавленный ниже 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);
Вывод
Ваше изображение не прозрачно, как вы описали, попробуйте использовать это вместо этого, если я правильно понял, что вы описали.
также вы должны найти программу, которая не преобразует прозрачность в белый при сохранении (или проверяет параметры для этого), если вы действительно сделали эти прозрачные в первую очередь.