使用Python将HTML转换为IMAGE

ff29svar  于 2023-05-21  发布在  Python
关注(0)|答案(6)|浏览(198)

这里有一个变量html_str,它是一个字符串,包含html标签和正文内容。我使用下面的Python代码从这个字符串创建了一个**.html**文件。

html_file = open("filename.html", "w")
html_file.write(html_str)
html_file.close()

现在我得到了html文件命名文件“filename.html".现在我想把“filename.html”转换成一个图像,命名为filename.jpg,内容与html文件完全相同。请帮帮我。

ct3nt3jp

ct3nt3jp1#

您可以使用imgkit来完成此操作

import imgkit

imgkit.from_file('test.html', 'out.jpg')

也可以使用htmlcsstoimage API

# pip3 install requests
import requests

HCTI_API_ENDPOINT = "https://hcti.io/v1/image"
HCTI_API_USER_ID = 'your-user-id'
HCTI_API_KEY = 'your-api-key'

data = { 'html': "<div class='box'>Hello, world!</div>",
         'css': ".box { color: white; background-color: #0f79b9; padding: 10px; font-family: Roboto }",
         'google_fonts': "Roboto" }

image = requests.post(url = HCTI_API_ENDPOINT, data = data, auth=(HCTI_API_USER_ID, HCTI_API_KEY))

print("Your image URL is: %s"%image.json()['url'])
# https://hcti.io/v1/image/7ed741b8-f012-431e-8282-7eedb9910b32
vfhzx4xs

vfhzx4xs2#

如果你不想让你的项目像其他Python模块一样依赖于wkhtmltopdf,我推荐html2image
您可以使用pip install html2image命令获取它。您的机器上还应安装Web浏览器(目前为Chrome/Chromium)。
安装完成后,您可以对HTMLstring进行截图,如下所示:

from html2image import Html2Image
hti = Html2Image()

html = '<h1> A title </h1> Some text.'
css = 'body {background: red;}'

# screenshot an HTML string (css is optional)
hti.screenshot(html_str=html, css_str=css, save_as='page.png')

也可以直接截图现有的HTML文件URL

# screenshot an HTML file
hti.screenshot(
    html_file='page.html', css_file='style.css', save_as='page2.png'
)

# screenshot an URL
hti.screenshot(url='https://www.python.org', save_as='python_org.png')

有关文档和更多示例,您可以查看the GitHub page of the project

jvidinwx

jvidinwx3#

另一个非常有用的渲染HTML网站的工具是无头Chromium浏览器。
在javascript中,您可以使用puppeteer API与之交互,但puppeteer有一个非官方的python端口,名为pyppeteer
根据我使用imgkit等python工具的经验,Chromium解决方案在加载图像或iFrames等外部资产时要可靠得多。
要使用pyppeteer获得渲染的HTML的图像版本,您只需加载页面,然后制作一个完整的页面截图:

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('http://example.com')
    await page.screenshot({'path': 'example.png', 'fullPage': 'true'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())
taor4pac

taor4pac4#

from html2image import Html2Image
hti = Html2Image()
with open('./test.html') as f:
    hti.screenshot(f.read(), save_as='out.png')
5kgi1eie

5kgi1eie5#

查看HtmlWebShot

# pip install htmlwebshot

from htmlwebshot import WebShot
shot = WebShot()
shot.quality = 100

image = shot.create_pic(html="file.html")
qrjkbowd

qrjkbowd6#

你可以用熟悉的工具- selenium 。你只需要把文件的路径,而不是链接:

from selenium import webdriver
driver = webdriver.Chrome(executable_path = ‘path\to\chromedriver.exe’’)
driver.get("file:/path/to/html")
driver.save_screenshot(‘out.png’)

瞧,你用几行代码和没有未知包的图像

相关问题