Объединение двух изображений в php - PullRequest
2 голосов
/ 04 августа 2009

Как можно объединить изображение головы и изображение тела, чтобы изображение головы точно фиксировалось на шее на изображении тела.

Файлы находятся по адресу:

Я предпринял попытку http://yajurinfotech.com/projects/stickers/preview.php.

В настоящее время у меня есть:

$h = 'head1.gif';
$b = 'body2.gif';

$headResource = imagecreatefromgif($h);
$bodyResource = imagecreatefromgif($b);

list($headWidth, $headHeight) = getimagesize($h);
list($bodyWidth, $bodyHeight) = getimagesize($b);

$previewHeight = $headHeight+$bodyHeight;
$previewWidth  = $headWidth;

$previewResource = imagecreatetruecolor($previewWidth, $previewHeight);

//make background white
$white = imagecolorallocate($previewResource, 255, 255, 255);
imagefill($previewResource, 0, 0, $white);

// Copy head image

imagecopyresized($previewResource,$headResource, ($headHeight/4)+3,($headHeight/2)-3,0,0,$previewWidth/4,$previewHeight/4,$headWidth,$headHeight);

//copy body image
imagecopy($previewResource,$bodyResource,0,$headHeight,0,0,$bodyWidth,$bodyHeight);

header('Content-type: image/gif');
imagegif($previewResource);

Как вы можете видеть в preview.php, изображение головы неправильно размещено над изображением тела.

Может кто-нибудь помочь мне найти алгоритм, который работает как для body2.gif, так и для body1.gif?

Ответы [ 4 ]

1 голос
/ 04 августа 2009

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

пример:

$background = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']. base_path()."/files/polaroid.jpg");
$insert     = imagecreatefromjpeg($path. 'photos/'.$imgName);
imagecolortransparent($insert, imagecolorat($insert, 0, 0));
$insert_x = imagesx($insert);
$insert_y = imagesy($insert);
imagecopymerge($background, $insert, 39, 32, 0, 0, $insert_x, $insert_y, 100);

надеюсь, что это полезно:)

1 голос
/ 04 августа 2009

Как вы можете видеть в preview.php, изображение головы неправильно размещено над изображением тела.

Может кто-нибудь помочь мне найти алгоритм, который работает как для body2.gif, так и для body1.gif?

Должно ли это работать только для двух предоставленных вами картинок или вы ищете общий алгоритм, который подходит для головы на шее?

Если вы хотите сделать первое, просто найдите правильные параметры, которые вы можете сделать самостоятельно. (методом проб и ошибок).

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

Может быть, вы можете рассказать нам немного больше о том, чего вы хотите достичь с помощью этого?

0 голосов
/ 06 августа 2009

Это не работа для php.

Очевидным решением было бы спроектировать изображения таким образом, чтобы все шеи находились в одинаковом положении , например в центре.

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

Сдвиг изображений может быть сделан с помощью CSS или с помощью прозрачного или фонового пикселя переменного размера. (То есть сгенерируйте прозрачные png изображения размером 1x1 пикселей. Затем измените его размер с помощью html.)

0 голосов
/ 04 августа 2009

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

http://www.verot.net/php_class_upload_samples.htm

...