我有一个名为svg.php的文件,它将一些TTF文本放在弯曲的路径上并将其对齐。当我输入地址localhost / AJAX / svg.php时,此文件完美显示TTF字体?initials = FOO
<?php
header('Content-Type: image/svg+xml');
?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="380px" height="253px" viewBox="0 0 380 253" enable-background="new 0 0 380 253" xml:space="preserve">
<defs>
<style type="text/css"><![CDATA[
@font-face {
font-family: 'LHF';
src: url('LHF.ttf');
}
text, textPath {
font-family:LHF;
}
]]></style>
<path id="path1" fill="none" d="M50.333,120.339 c92.778-24.903,185.556-24.903,278.334,0"/>
</defs>
<text x="100" y="500" font-size="100" style="fill:black;" text-anchor="middle"><textPath xlink:href="#path1" startOffset="50%"><?php echo $_GET["initials"]; ?></textPath></text>
</svg>
但是,当我从另一个页面调用图像时,TTF字体会被删除,例如index.php:
<!DOCTYPE html>
<html>
<head>
<script>
function myFunction()
{
var x=document.getElementById("fname").value;
document.getElementById("words").src="svg.php?initials=" + x;
}
</script>
</head>
<body>
<input type="text" id="fname" onkeyup="myFunction()"><br />
<img src="svg.php" id="words" />
</body>
</html>
有什么想法吗? 提前致谢
答案 0 :(得分:0)
图像必须完全自包含,即privacy reasons的一个文件中的所有内容。
如果您希望在将SVG用作图像时(在图像标记中或作为CSS图像背景)中使用ttf字体,则必须对其进行base64编码并将其作为数据URL嵌入到图像中。 / p>
@font-face {
font-family: 'LHF';
src: url("data:application/x-font-ttf;base64,[base-encoded font here]");
}
或者,根据您的要求,您可以使用<object>
或<iframe>
代码而不是<image>
代码。
答案 1 :(得分:0)
问题是封闭标签。在第一种情况(工作)中,您在页面容器中加载svg,在第二种情况下(非工作),您在<img>
标记内加载。
删除标记,只需将其加载到普通容器<div>
或<object>
或直接加载到另一个<svg>
标记中,或者您可能希望在浏览器中使用javascript加载它。对于后一种情况,我建议您使用jquery.svg库。