Добавяне на две изображения 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 няма да работи, тъй като това ще се окаже повреден файл (за начало) и пак ще изведе предупреждение, също толкова бързо FYI. Трябва да е действителен 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