Цвет изображения изменился с помощью imagecreate в php - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно создать динамическое изображение студенческого билета.добавить положить этот объект изображения в фотографию профиля студента.Но цвет изображения студента изменился.

Как поместить фотографию профиля студента с оригинальным цветом?

Вот мой код:

header("Content-Type: image/jpeg");
$im = @imagecreate(602, 980)
or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 255, 255, 255);

$card_header = imagecreatefromjpeg('img/card/card-header.jpg');
imagecopy($im, $card_header, 0, 0, 0, 0, 602, 253);

$card_footer = imagecreatefromjpeg('img/card/card-footer.jpg');
imagecopy($im, $card_footer, 0, 834, 0, 0, 602, 146);

$student_photo = 'img/card/girls-profile.jpg'; //imagecreatefromjpeg($studentlist[0]->getCardPhoto());
// Get new sizes
list($width, $height) = getimagesize($student_photo);
$newwidth = 180;
$newheight = 220;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($student_photo);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagecopy($im, $thumb, 220, 220, 0, 0, $newwidth, $newheight);

imagejpeg($im, "uploads/card/test.jpeg");
imagedestroy($im);

Заголовок Img:

enter image description here

Имя нижнего колонтитула:

enter image description here

Изображение профиля:

enter image description here

Вот мое выходное изображение:

enter image description here

1 Ответ

0 голосов
/ 14 февраля 2019

Основная проблема заключается в том, что ваше $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, чтобы зафиксировать ширину и высоту без потери соотношения размеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...