Добавление двух изображений PHP

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

Я делаю это:

$top_file = 'image1.png';
$bottom_file = 'image2.png';

$top = imagecreatefrompng($top_file);
$bottom = imagecreatefrompng($bottom_file);

// get current width/height
list($top_width, $top_height) = getimagesize($top_file);
list($bottom_width, $bottom_height) = getimagesize($bottom_file);

// compute new width/height
$new_width = ($top_width > $bottom_width) ? $top_width : $bottom_width;
$new_height = $top_height + $bottom_height;

// create new image and merge
$new = imagecreate($new_width, $new_height);
imagecopy($new, $top, 0, 0, 0, 0, $top_width, $top_height);
imagecopy($new, $bottom, 0, $top_height+1, 0, 0, $bottom_width, $bottom_height);

// save to file
imagepng($new, 'merged_image.png');

.. но объединенное изображение не имеет обоих изображений. PHP сообщает об этом:

Warning: imagecreatefrompng(): '/Users/myusername/Work/www/projectname/staticimage.jpg' is not a valid PNG file in /Users/myusername/Work/www/projectname/imageWatermark.php on line 60

Warning: imagecopy() expects parameter 2 to be resource, boolean given in /Users/myusername/Work/www/projectname/imageWatermark.php on line 74

person eozzy    schedule 23.01.2015    source источник
comment
Он отлично работает для меня. можно увидеть оба изображения.   -  person Sameeraa4ever    schedule 23.01.2015
comment
то же самое. Изображения сломаны? Файлов не существует?   -  person Oleg Dubas    schedule 23.01.2015
comment
Кстати, вы можете использовать $new_width = max($top_width, $bottom_width).   -  person Barmar    schedule 23.01.2015
comment
да. Я проверил разные изображения, затем увидел, что изображения сломаны.   -  person Sameeraa4ever    schedule 23.01.2015
comment
Пути правильные, однако это пути к файловой системе (/user/myname/...), может ли это быть проблемой?   -  person eozzy    schedule 23.01.2015
comment
Нет, это то, что они должны быть. Может быть, вам следует использовать imagecopyresized для масштабирования нижнего изображения при его копировании?   -  person Barmar    schedule 23.01.2015
comment
Да, то же самое здесь; успех.   -  person Funk Forty Niner    schedule 23.01.2015
comment
Добавьте сообщение об ошибке в начало вашего файла (файлов) сразу после открывающего <?php тега error_reporting(E_ALL); ini_set('display_errors', 1); и посмотрите, даст ли это что-нибудь.   -  person Funk Forty Niner    schedule 23.01.2015
comment
Ах да, php сообщил warnings   -  person eozzy    schedule 23.01.2015
comment
staticimage.jpg' должно быть .png согласно предупреждению. Поскольку вы используете imagecreatefrompng(), вам нужно будет использовать imagecreatefromjpeg()   -  person Funk Forty Niner    schedule 23.01.2015
comment
О, хорошо, это работает, так что похоже, что оба должны быть в формате PNG. Спасибо! :)   -  person eozzy    schedule 23.01.2015
comment
Ага! Не за что.   -  person Funk Forty Niner    schedule 23.01.2015
comment
Вы можете либо удалить вопрос, так как он был решен в комментариях, либо я могу отправить ответ. Выбор остается за вами. В любом случае это нормально. Я просто рад, что это решилось.   -  person Funk Forty Niner    schedule 23.01.2015
comment
Да, пожалуйста, отправьте ответ, может быть полезно кому-то еще.   -  person eozzy    schedule 23.01.2015
comment
Это было сделано @3zzy ура   -  person Funk Forty Niner    schedule 23.01.2015
comment
@3zzy Я немного отредактировал свой ответ, где вы можете использовать как imagecreatefrompng(), так и imagecreatefromjpeg() вместе, что сработало для меня во время тестирования.   -  person Funk Forty Niner    schedule 23.01.2015


Ответы (1)


Как сказано/решено в комментариях, и предупреждения, появившиеся после использования отчетов об ошибках:

Оба файла должны быть .png, где вы используете .jpg.

imagecreatefrompng(): '/Users/myusername/Work/www/projectname/staticimage.jpg'

Вы не можете смешивать оба разных формата файла/изображения, только не при использовании imagecreatefrompng() с файлом .jpg.

Примечание. Простое переименование .jpg в .png не сработает, так как это приведет к повреждению файла (для начала) и все равно выдаст предупреждение, к вашему сведению. Это должен быть реальный формат изображения PNG.

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

$top_file = 'image1.png';
$bottom_file = 'image2.jpg';

$top = imagecreatefrompng($top_file);
$bottom = imagecreatefromjpeg($bottom_file);

Добавьте отчеты об ошибках вверху страницы. файл(ы), которые помогут найти ошибки.

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

Примечание. Отчеты об ошибках следует создавать только на стадии подготовки, а не в рабочей среде.

person Funk Forty Niner    schedule 23.01.2015