Конвертировать любой тип изображения в PNG и добавить в PNG

Я пытаюсь создать плакат для сотрудника для сайта, который я разрабатываю. Моя цель — взять изображение из каталога на сервере любого типа файла (.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 из него.

0

Решение

Я просто провожу несколько локальных тестов … Следующие работы:

$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'));

Если после того, как вы попробовали последний пример, у вас все еще возникают проблемы, обновите свой вопрос. Полезно использовать используемые вами изображения, в дополнение к примеру с функциональным кодом.

0

Другие решения

После того, как вы прочитали изображение с 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 на провал, и вы должны проверить, если у вас есть какие-либо проблемы с этим.

Возможно, ваши пути к изображениям относятся к корню документа, а ваш рабочий каталог отличается.
Или у вас проблема с разрешением.
Или ваши изображения просто отсутствуют.
Невозможно сказать по вашему вопросу.

0

По вопросам рекламы [email protected]