Как правильно показать сгенерированный SVG из PHP

Я генерирую коды svg qr через php и получаю в php файле следующий код:

генерировать-svg.php

<?
include("../qrcode/qrlib.php");
QRcode::svg('Example');
?>

И я вижу в HTML-коде в браузере:

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns = "http://www.w3.org/2000/svg" xml:space = "preserve" xmlns:xlink = "http://www.w3.org/1999/xlink" width = "111" height = "111" viewBox = "0 0 111 111">
<desc></desc>
<rect width = "111" height = "111" fill = "#ffffff" cx = "0" cy = "0" />
<defs>
<rect id = "p" width = "3" height = "3" />
</defs>
<g fill = "#000000">
<use x = "12" y = "12" xlink:href = "#p" />
</g>
</svg>

Затем мне нужно вставить этот код svg как изображение в другой файл php. Я делаю это так:

svg.php

<?
echo '<object type = "image/svg+xml" data = "generate-svg.php" class = "icon-qr"></object>';
?>

Но мне нужно получить код svg и вставить его как картинку. Как мне это сделать?

Если я использую

echo file_get_contents('generate-svg.php');

Я вижу этот HTML-код:

<!--?
include("../qrcode/qrlib.php");
QRcode::svg('Example');
?-->
<html><head></head><body></body></html>

Отвечает ли это на ваш вопрос? Преобразование изображения SVG в PNG с помощью PHP

Ken Lee 05.02.2023 05:55

@Ken Lee, спасибо, но мне не нужно преобразовывать svg в png ... мне нужно проанализировать сгенерированный код svg и вставить его как изображение, а не как объект.

Vlad 05.02.2023 06:00

Я вижу, пожалуйста, смотрите мой ответ ниже

Ken Lee 05.02.2023 06:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Один из способов — отобразить SVG, повторив сгенерированный SVG с помощью команды PHP file_get_contents.

Скажем, если generate-svg.php выглядит следующим образом (в качестве примера я создаю красный круг):

ДЕМО

<!DOCTYPE html>
<html>
<body>
<svg xmlns = "http://www.w3.org/2000/svg" xml:space = "preserve" xmlns:xlink = "http://www.w3.org/1999/xlink" width = "111" height = "111" viewBox = "0 0 111 111">

  <circle cx = "50" cy = "50" r = "40" stroke = "black" stroke-width = "3" fill = "red" />

</svg>

Затем используйте следующее, чтобы отобразить его (вместе с другими вещами, которые вы хотите отобразить):

ДЕМО

<?php 
echo "This is a line <br>";
echo file_get_contents("generate-svg.php"); 
echo "<br>This is another line <br>";
?>

[Дополнительный балл]

Если вы визуализируете SVG с помощью PHP-скрипта, то, если вы используете file_get_contents в локальном файле, он будет точно отображать PHP-скрипт вместо его выполнения, если только вы не используете URL-адрес, начинающийся с http:// или https://. Вы можете использовать что-то вроде (при условии, что php-скрипт называется generate-svg2.php) следующее:

echo '<img src = "generate-svg2.php">';

Итак, generate-svg2.php может быть:

ДЕМО

<?php

    include('./phpqrcode-master/qrlib.php');
    
    // outputs image directly into browser, as PNG stream
  echo QRcode::svg('SO is good');

?>

тогда скрипт для его отображения (вместе с другими элементами HTML) может быть:

ДЕМО

<?php 
echo "This is a line <br>";
//echo file_get_contents("generate-svg.php"); 

echo '<img src = "generate-svg2.php">';

echo "<br>This is another line x<br>";


?>

@Kee Lee, посмотрите мой вопрос еще раз - если я использую echo file_get_contents('generate-svg.php');, я вижу этот HTML-код: <!--? include("../qrcode/qrlib.php"); QRcode::svg('Example'); ?--> <html><head></head><body></body></html>

Vlad 05.02.2023 16:50

Я просто знаю, что вы будете использовать PHP для рендеринга SVG, в этом случае обратитесь к части «Дополнительный пункт» моего исправленного ответа выше.

Ken Lee 05.02.2023 17:21

@Kee Lee, спасибо, это код действителен, но я хочу получить тег <svg></svg> с первой страницы (generate-svg.php) для вставки на вторую страницу ... Это возможно?

Vlad 05.02.2023 17:33

Если вы хотите иметь <svg>....</svg>, вы можете использовать include (например, <?php include "generate-svg2.php";?>). Однако я не знаю, вызовет ли qrlib.php какой-либо вывод заголовка при рендеринге svg, что, в свою очередь, приведет к тому, что дальнейшие элементы HTML станут недействительными, но вы можете попробовать это самостоятельно.

Ken Lee 05.02.2023 17:51

Первое что-то с Функциями управления выводом:

ob_start();

require 'generate-svg.php';

$svg = ob_get_clean();

file_put_contents('svgs/generated-svg.svg', $svg);

Затем:

<img src = "/svgs/generated-svg.svg" height = "200" width = "200" alt = "QR code">

но у меня есть первый файл generate-svg.php.... не generate-svg.svg :(

Vlad 05.02.2023 16:48

@Vlad У тебя сейчас работает?

Jasom Dotnet 06.02.2023 10:34

Другие вопросы по теме