Основная проблема заключается в том, что ваше $im
также должно быть цветным изображением.Во-вторых, вы должны заполнить свой фон.Вы также можете пропустить создание $thumb
и скопировать его прямо в ваш $im
.
Вот рабочая версия (я изменил ваши пути, чтобы проверить ее на моей машине)
<?php
header('Content-Type: image/jpeg');
$im = @imagecreatetruecolor(602, 980) // you want to create a truecolorimage here
or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $background_color); // you have to actually use the allocated background color
$card_header = imagecreatefromjpeg('card-header.jpg');
imagecopy($im, $card_header, 0, 0, 0, 0, 602, 253);
$card_footer = imagecreatefromjpeg('card-footer.jpg');
imagecopy($im, $card_footer, 0, 834, 0, 0, 602, 146);
$student_photo = 'girls-profile.jpg';
// Get new sizes
list($width, $height) = getimagesize($student_photo);
$newwidth = 180;
$newheight = 220;
// Load
//$thumb = imagecreatetruecolor($newwidth, $newheight); // you can skip allocating extra memory for a intermediate thumb
$source = imagecreatefromjpeg($student_photo);
// Resize
imagecopyresized($im, $source, 220, 220, 0, 0, $newwidth, $newheight, $width, $height); // and copy the thumb directly
imagejpeg($im);
imagedestroy($im);
// you should also destroy the other images
imagedestroy($card_header);
imagedestroy($card_footer);
imagedestroy($source);
Сохранить вИмейте в виду, что текущее изображение профиля может быть искажено, но вы можете не захотеть либо убедиться, что изображения профиля всегда имеют правильное соотношение сторон, либо вы можете обрезать изображение.Подробнее см. Здесь: Обрезать изображение PHP, чтобы зафиксировать ширину и высоту без потери соотношения размеров