Я генерирую коды 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>
@Ken Lee, спасибо, но мне не нужно преобразовывать svg в png ... мне нужно проанализировать сгенерированный код svg и вставить его как изображение, а не как объект.
Я вижу, пожалуйста, смотрите мой ответ ниже
Один из способов — отобразить 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>
Я просто знаю, что вы будете использовать PHP для рендеринга SVG, в этом случае обратитесь к части «Дополнительный пункт» моего исправленного ответа выше.
@Kee Lee, спасибо, это код действителен, но я хочу получить тег <svg></svg> с первой страницы (generate-svg.php) для вставки на вторую страницу ... Это возможно?
Если вы хотите иметь <svg>....</svg>, вы можете использовать include
(например, <?php include "generate-svg2.php";?>
). Однако я не знаю, вызовет ли qrlib.php какой-либо вывод заголовка при рендеринге svg, что, в свою очередь, приведет к тому, что дальнейшие элементы HTML станут недействительными, но вы можете попробовать это самостоятельно.
Первое что-то с Функциями управления выводом:
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 У тебя сейчас работает?
Отвечает ли это на ваш вопрос? Преобразование изображения SVG в PNG с помощью PHP