在 QtWebView 中以正确的尺寸显示 SVG 图像
Display SVG image in QtWebView with the right size
我正在尝试在 SVG
图像中显示一些包含数学的维基百科文章
在 QtWebView 中,虽然我不知道如何设置图像的 width
和 height
属性。 QtWebView
将忽略这些属性,当我
省略它们图像很小。
您可以按如下方式进行测试:
下载 this HTML 编辑器。
转到 this web page and download e.g. this SVG 图像。
创建 img 元素,反映维基百科中的样式:
<img src="e15d3619d42b28662c5952c9ece60cd928e31774.svg" style="vertical-align: -0.671ex; width:25.517ex; height:2.343ex;">
并且图像将被忽略。
下面的作品,但是图片很小
<img src="e15d3619d42b28662c5952c9ece60cd928e31774.svg" >
如何以正确的尺寸(宽度和高度)显示图像?
对高度和宽度使用其他单位。例如:
<img src="https://www.w3.org/Icons/SVG/svg-logo.svg" height='200px' />
尝试使用这种 HTML 方法来更改 SVG 图像尺寸:
<!-- you can test this code in any online html editor. -->
<html>
<head>
<!-- blah blah blah... -->
</head>
<body>
<p>all the images must be redrawn properly when SVG animation runs...</p>
<img height="250px" width="800px" border="5" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e15d3619d42b28662c5952c9ece60cd928e31774">
</body>
</html>
在 WebKit 浏览器中,SVG 高度或宽度经常被错误计算。要解决此问题,请使用此 CSS 样式:
svg { width: 100%; height: auto; }
我最近发现非常有用和有趣post:CSS Tricks: How to Scale SVG。
或尝试这种 Python 方法来更改描述 Here 的 SVG 图像尺寸。
from PyQt5 import QtCore, QtGui, QtSvg
from PyQt5.QtWebKit import QGraphicsWebView
import sys
application = QtGui.QApplication(sys.argv)
myScene = QtGui.QGraphicsScene()
myView = QtGui.QGraphicsView(myScene)
box = QtSvg.QGraphicsSvgItem('/Users/swift/Desktop/myImage.svg').boundingRect()
webView = QGraphicsWebView()
webView.load(QtCore.QUrl('/Users/swift/Desktop/myImage.svg'))
webView.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
webView.resize(box.width(), box.height())
incWidth = 48
incHeight = 36
myScene.addItem(webView)
myView.resize(box.width() + incWidth, box.height() + incHeight)
myView.show()
sys.exit(app.exec_())
当然,您可以使用参数调用 setHtml()
public 函数:
code =
"""
<html>
<head>
</head>
<body>
<!-- You can load SVG image itself. -->
<img height="250px" width="800px" style="width: 100%;" src="myImage.svg">
<!-- Or you can load SVG Viewport and use other images inside it. -->
<svg width="600" height="450">
<image href="myImage.svg" x="0" y="0" height="320px" width="240px"/>
</svg>
</body>
</html>
"""
self.webView.setHtml(code)
或者直接通过Qt分配大小:
svgImage = QImage(QSize(1280, 720))
另请参阅官方 Qt SVG Documentation
描述基于 XML 的方法 Here。
我正在尝试在 SVG
图像中显示一些包含数学的维基百科文章
在 QtWebView 中,虽然我不知道如何设置图像的 width
和 height
属性。 QtWebView
将忽略这些属性,当我
省略它们图像很小。
您可以按如下方式进行测试: 下载 this HTML 编辑器。 转到 this web page and download e.g. this SVG 图像。
创建 img 元素,反映维基百科中的样式:
<img src="e15d3619d42b28662c5952c9ece60cd928e31774.svg" style="vertical-align: -0.671ex; width:25.517ex; height:2.343ex;">
并且图像将被忽略。
下面的作品,但是图片很小
<img src="e15d3619d42b28662c5952c9ece60cd928e31774.svg" >
如何以正确的尺寸(宽度和高度)显示图像?
对高度和宽度使用其他单位。例如:
<img src="https://www.w3.org/Icons/SVG/svg-logo.svg" height='200px' />
尝试使用这种 HTML 方法来更改 SVG 图像尺寸:
<!-- you can test this code in any online html editor. -->
<html>
<head>
<!-- blah blah blah... -->
</head>
<body>
<p>all the images must be redrawn properly when SVG animation runs...</p>
<img height="250px" width="800px" border="5" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e15d3619d42b28662c5952c9ece60cd928e31774">
</body>
</html>
在 WebKit 浏览器中,SVG 高度或宽度经常被错误计算。要解决此问题,请使用此 CSS 样式:
svg { width: 100%; height: auto; }
我最近发现非常有用和有趣post:CSS Tricks: How to Scale SVG。
或尝试这种 Python 方法来更改描述 Here 的 SVG 图像尺寸。
from PyQt5 import QtCore, QtGui, QtSvg
from PyQt5.QtWebKit import QGraphicsWebView
import sys
application = QtGui.QApplication(sys.argv)
myScene = QtGui.QGraphicsScene()
myView = QtGui.QGraphicsView(myScene)
box = QtSvg.QGraphicsSvgItem('/Users/swift/Desktop/myImage.svg').boundingRect()
webView = QGraphicsWebView()
webView.load(QtCore.QUrl('/Users/swift/Desktop/myImage.svg'))
webView.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
webView.resize(box.width(), box.height())
incWidth = 48
incHeight = 36
myScene.addItem(webView)
myView.resize(box.width() + incWidth, box.height() + incHeight)
myView.show()
sys.exit(app.exec_())
当然,您可以使用参数调用 setHtml()
public 函数:
code =
"""
<html>
<head>
</head>
<body>
<!-- You can load SVG image itself. -->
<img height="250px" width="800px" style="width: 100%;" src="myImage.svg">
<!-- Or you can load SVG Viewport and use other images inside it. -->
<svg width="600" height="450">
<image href="myImage.svg" x="0" y="0" height="320px" width="240px"/>
</svg>
</body>
</html>
"""
self.webView.setHtml(code)
或者直接通过Qt分配大小:
svgImage = QImage(QSize(1280, 720))
另请参阅官方 Qt SVG Documentation
描述基于 XML 的方法 Here。