Я пытаюсь создать плакат для сотрудника для сайта, который я разрабатываю. Моя цель — взять изображение из каталога на сервере любого типа файла (.png, .gif, .jpeg и т. Д.) И скопировать его в другой образ, который затем будет выведен в браузер.
Проблема в том, что я использую:
$final_image = imagecreatefrompng("large_background.png");
для создания окончательного изображения и по какой-то причине, если я добавлю изображения профиля с типом jpeg, gif и т. д. (любой тип, не являющийся jpeg), это не сработает. Изображения никогда не отображаются на выходе. Тем не менее, если я использую PNG, это работает.
Чтобы решить эту проблему, я попытался преобразовать изображение в png, а затем создать png из него, как показано в коде ниже. К сожалению, это не работает. Изображения профиля по-прежнему не отображаются на заднем плане.
// get image from database
$image_from_database = could be a .png, .jpeg, .gif, etc.
// get the image from the profile images directory
$path = "profile_images/".$image_from_database;
// create a png out of the image
$image = imagecreatefrompng(imagepng($path));
// add the $image to my larger $final_image (which is a png)
imagecopy($final_image, $image, $x, $y, 0,0, $height, $width);
imagepng($final_image, $ouput_url);
...
Кто-нибудь может сказать мне, почему это не сработает? Изображения моего профиля не отображаются на выходе окончательного изображения.
Мои вопросы,
imagecreatefrompng(imagepng(...));
даже возможно? По сути, я хочу преобразовать изображение любого типа в PNG, а затем создать PNG из него.Я просто провожу несколько локальных тестов … Следующие работы:
$src = imagecreatefromgif('test.gif');
$dest = imagecreatefrompng('test.png');
imagecopy($dest, $src, 0, 0, 0, 0, 100, 100);
header('Content-Type: image/png');
imagepng($dest);
imagedestroy($src);
imagedestroy($dest);
Так же это:
$src = imagecreatefromstring(file_get_contents('test.gif'));
Если после того, как вы попробовали последний пример, у вас все еще возникают проблемы, обновите свой вопрос. Полезно использовать используемые вами изображения, в дополнение к примеру с функциональным кодом.
После того, как вы прочитали изображение с imagecreatefrom*
функция, не имеет значения, в каком формате был оригинал.
imagecreatefrom*
функции возвращают ресурс изображения. Когда изображение загружено, вы используете внутреннее представление изображений, а не изображения PNG, JPEG или GIF.
Если изображения успешно загружены imagecopy
не должно быть проблем с ними.
Этот код использует изображения в разных форматах и работает без проблем:
$img = imagecreatefrompng('bg.png');
$png_img = imagecreatefrompng('img.png');
$jpeg_img = imagecreatefromjpeg('img.jpeg');
$gif_img = imagecreatefromgif('img.gif');
/* or use this, so you don't need to figure out which imagecreatefrom* function to use
$img = imagecreatefromstring(file_get_contents('bg.png'));
$png_img = imagecreatefromstring(file_get_contents('img.png'));
$jpeg_img = imagecreatefromstring(file_get_contents('img.jpeg'));
$gif_img = imagecreatefromstring(file_get_contents('img.gif'));
*/
imagecopyresampled($img, $png_img, 10, 10, 0,0, 100, 100, 200, 200);
imagecopyresampled($img, $jpeg_img, 120, 10, 0,0, 100, 100, 200, 200);
imagecopyresampled($img, $gif_img, 230, 10, 0,0, 100, 100, 200, 200);
header('Content-Type: image/png');
imagepng($img);
Ваш пример
$image = imagecreatefrompng(imagepng($path));
неправильно.
imagepng
используется для вывода ресурса изображения в виде изображения PNG. Если вы указываете путь в качестве второго аргумента, создается файл изображения в формате PNG, в противном случае он выводится на печать следующим образом echo
делает.
Какие imagepng
фактически возвращает логическое значение, указывающее, был ли вывод успешным.
Затем вы передаете этот логический imagecreatefrompng
который ожидает путь к файлу. Это явно неправильно.
Я подозреваю, что у вас есть проблемы с загрузкой изображений.
imagecreatefrom*
возврат функций FALSE
на провал, и вы должны проверить, если у вас есть какие-либо проблемы с этим.
Возможно, ваши пути к изображениям относятся к корню документа, а ваш рабочий каталог отличается.
Или у вас проблема с разрешением.
Или ваши изображения просто отсутствуют.
Невозможно сказать по вашему вопросу.