【问题标题】:My SVG images are not loading我的 SVG 图像未加载
【发布时间】:2016-05-16 20:36:27
【问题描述】:

我目前正在尝试在一个非常基本的网站中加载几个 SVG 图像,但遇到了奇怪的问题。如果相关,我在绘制各种参数方程时使用由 matplotlib 创建的 SVG 文件。我尝试加载的文件只是加载四个随机 SVG 图像(当我尝试单独加载它们时,所有这些图像都可以正常工作并加载)并将它们放在一个小网页中:

<html>
<img src="graphs/{0}.svg">
<img src="graphs/{1}.svg">
<img src="graphs/{2}.svg">
<img src="graphs/{3}.svg">
</html>

({0} 到 {3} 被替换为实际文件名,例如 1070)。由于某种原因,这每次都失败。例如,

<html>
<img src="graphs/2286.svg">
<img src="graphs/7499.svg">
<img src="graphs/7444.svg">
<img src="graphs/7666.svg">
</html>

即使我单独访问这些链接中的每一个都有效,也会失败。我还尝试通过将 file:///Users/my_name/math_project/file.html 作为 url 直接访问 html,并将 {0} 等替换为数字,这很有效。我已经束手无策了,如果有人能帮助我,我将不胜感激。这是用于生成页面的源代码

import socket
import threading
import random
import os
import time
os.chdir("/users/my_name/math_project")
file = open("metadata.txt",'r') # file containing svg file names and equations
svg_data = file.read().split("\n")
file.close()
def handle_call(clientsocket,location): # handles a request
  l = time.time()
  res = clientsocket.recv(100000)
  res = res.split(b"\n")
  request = res[0].split(b" ")[1]
  if request == b"/favicon.ico":
    file = open("favicon.ico",'rb')
    stuff2 = file.read()
    file.close()
    clientsocket.send(stuff2)
  if request == b'/':
    file = open("file.html",'rb')
    res = file.read()
    file.close()
    res = str(res,'utf-8')

    res = res.format(*[random.choice(svg_data).split(":")[0] for a in range(4)])
    clientsocket.send(bytes(res,'utf-8'))
  if request.startswith(b"/graphs/"):
    file = open(place[1:],'rb')
    stuff = file.read()
    file.close()
    clientsocket.send(stuff)
sock = socket.socket()
port = random.randint(2000,10000)
while 1:
  try:
    sock.bind(('',port))
    break
  except BaseException:
    port = random.randint(2000,10000)
print("Bound to port {0}".format(port))
sock.listen(10)
while 1:
  threading.Thread(target=handle_call,args=sock.accept(),).start()

【问题讨论】:

    标签: python svg matplotlib


    【解决方案1】:

    查看您的响应标头,Web 服务器返回的 SVG 文件具有错误的 Content-Type。

    Content-Type: image/svg
    

    SVG 文件的正确内容 (MIME) 类型是:

    Content-Type: image/svg+xml
    

    修复您的网络服务器。

    【讨论】:

      【解决方案2】:

      您可以尝试的一个简单的事情是指定一个文档类型来告诉浏览器您正在使用 html 5。您也可以将内容放在“body”标签中,以防万一缺少它会混淆任何东西。

      <!DOCTYPE html>
      <html>
        <body>
        <img...
        </body>
      </html
      

      如果这没有帮助,请您澄清一下您所说的“失败”是什么意思?输出是什么样的,开发工具“网络”选项卡在尝试加载图像时会报告什么?您的示例完整 html 是否是您程序的确切输出的副本?如果没有,你能准确地粘贴它输出的内容吗?

      【讨论】:

      • 感谢您的回答。 “失败”是指显示所有四个的默认缩略图:imgur.com/cZq2ajh。网络选项卡(我之前从未听说过,谢谢!)几乎没有提供有关实际问题的信息,只是出了点问题:imgur.com/a/BNnTP。那是第一张图片,其余的看起来基本相同。同样,我不知道出了什么问题 - 我使用 request 尝试查看它是否可以为我提供更多信息,但它没有抛出任何错误并且 svg 文件传输正常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 2021-10-28
      • 2015-08-12
      • 2016-01-17
      • 2021-10-25
      • 2020-07-22
      • 2021-05-25
      相关资源
      最近更新 更多