Spaces:
Running
Running
File size: 5,917 Bytes
d0c2b7c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
import tempfile
import time
from selenium import webdriver
from PIL import Image
import os
import subprocess
import json
import chromedriver_autoinstaller
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chrome.options import Options
chrome_path = "/tmp/chrome-extract/opt/google/chrome/google-chrome"
# Function to install and configure Chrome without sudo
def setup_chrome():
chrome_url = "https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
chrome_deb_path = "/tmp/google-chrome-stable_current_amd64.deb"
subprocess.run(["wget", chrome_url, "-O", chrome_deb_path])
extract_dir = "/tmp/chrome-extract"
os.makedirs(extract_dir, exist_ok=True)
# Extract Chrome browser files
subprocess.run(["ar", "x", chrome_deb_path], cwd=extract_dir)
data_tar_path = os.path.join(extract_dir, "data.tar.xz")
subprocess.run(["tar", "xf", data_tar_path], cwd=extract_dir)
# Set Chrome browser path
os.environ["CHROME_BINARY"] = chrome_path
# Add Chrome path to system PATH
os.environ["PATH"] = f"{os.path.dirname(chrome_path)}:{os.environ['PATH']}"
# Install ChromeDriver
chromedriver_autoinstaller.install()
#return chrome_path
# Function to convert HTML content to an image
def html_to_image(html_content):
# Save HTML content in a temporary file
with tempfile.NamedTemporaryFile(delete=False, suffix='.html') as html_file:
html_file.write(html_content.encode('utf-8'))
html_file_path = html_file.name
options = Options()
options.binary_location = chrome_path
options.add_argument("--headless") # For headless mode
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
# Start the Chrome browser
driver = webdriver.Chrome(service=ChromeService(), options=options)
# Load the HTML file
driver.get(f'file://{html_file_path}')
# Wait for the page to load
time.sleep(2)
# Get the page dimensions
width = driver.execute_script("return document.body.scrollWidth")
height = driver.execute_script("return document.body.scrollHeight")
# Resize window to the page size
driver.set_window_size(width, height)
# Capture screenshot and save as a PNG file
screenshot_path = tempfile.NamedTemporaryFile(delete=False, suffix='.png').name
driver.save_screenshot(screenshot_path)
# Close the browser
driver.quit()
return screenshot_path
def render_abc(abc_string):
abc_string = json.dumps(abc_string)
print("in render_abc")
html_template = f"""
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/abcjs@6.4.2/dist/abcjs-basic.min.js"></script>
</head>
<body>
<div id='abcjs-render' style='text-align: center;'></div>
<script>
var abcNotation = {abc_string};
ABCJS.renderAbc('abcjs-render', abcNotation);
</script>
</body>
</html>
"""
screenshot_path = html_to_image(html_template)
print(screenshot_path)
return screenshot_path
# Initialize the environment
#chrome_path = setup_chrome()
# Example of how to call the function
html_content = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ABCJS Example</title>
<script src="https://cdn.jsdelivr.net/npm/abcjs@6.4.3/dist/abcjs-basic.min.js"></script>
</head>
<body>
<div id="abc"></div>
<script>
var abcNotation = `
X:1
T:菊次郎的夏天(Summer版本C)
%%score { 1 | 2 }
L:1/16
Q:1/4=114
M:4/4
I:linebreak $
K:C
V:1 treble nm="钢琴" snm="Pno."
V:2 bass
L:1/8
V:1
"^Moderato" z16 | z16 | z16 | z8 z4 .GI6J.cI7J.dI8J.eI9J |: %4
!>!dI10J2.cI11JcI12J- cI13J8 .GI14J.cI15J.dI16J.eI17J | %5
!>!dI18J2cI19J.dI20J z2 .eI22J2 !>!eI23J4 .GI24J.cI25J.dI26J.eI27J | %6
!>!dI28J2.cI29JcI30J- cI31J8 .GI32J.cI33J.dI34J.eI35J | %7
!>!dI36J2cI37J.dI38J z2 .gI40J2 !>!eI41J4 eI42J2fI43J2 | %8
!mf! [eI44JgI45J]2[eI46JgI47J][eI48J-gI49J-]- [eI50JgI51J]2gI52J2 gI53J2eI54JcI55J- cI56J2eI57JfI58J | %9
[eI59JgI60J]2[eI61JgI62J][eI63J-gI64J-]- [eI65JgI66J]2[eI67JgI68J]2 gI69J2eI70JcI71J- cI72J2cI73JdI74J | %10
eI75J2eI76JeI77J- eI78J2eI79J2 eI80J2aI81J2 (3!>!dI82JeI83JdI84JcI85J2 |1 %11
!>!dI86J8 z4 .GI88J.cI89J.dI90J.eI91J :|2 !>!cI92J8 z8 || z16 | z16 | z16 | %16
!>![G,I97JCI98JEI99J]16 |] %17
V:2
A,,I100J.E,I101J.A,I102J.E,I103J F,,I104J.C,I105J.F,I106J.C,I107J | %1
G,,I108J.D,I109J.G,I110J.D,I111J C,I112J.G,I113J.CI114J.G,I115J | %2
A,,I116J.E,I117J.A,I118J.E,I119J F,,I120J.C,I121J.F,I122J.C,I123J | %3
G,,I124J.D,I125J.G,I126J.D,I127J C,I128J.G,I129J.CI130J.G,I131J |: %4
A,,I132J.E,I133J.A,I134J.E,I135J F,,I136J.C,I137J.F,I138J.C,I139J | %5
G,,I140J.D,I141J.G,I142J.D,I143J C,I144J.G,I145J.CI146J.G,I147J | %6
A,,I148J.E,I149J.A,I150J.E,I151J F,,I152J.C,I153J.F,I154J.C,I155J | %7
G,,I156J.D,I157J.G,I158J.D,I159J C,I160J.G,I161J.CI162J.G,I163J | %8
G,,I164J.D,I165J.G,I166J.D,I167J F,,I168J.C,I169J.F,I170J.C,I171J | %9
E,,I172J.B,,I173J.E,I174J.B,,I175J A,,I176J.E,I177J.A,I178J.E,I179J | %10
D,,I180J.A,,I181J.D,I182J.A,,I183J F,,I184J2 z2 |1 %11
G,,I186J.D,I187J.G,I188J.D,I189J G,,I190J.D,I191J.G,I192J.D,I193J :|2 %12
C,I194JG,I195JCI196JG,I197J A,,I198JE,I199JA,I200JE,I201J || %13
F,,I202JC,I203JF,I204JC,I205J G,,I206JD,I207JG,I208JD,I209J | %14
C,I210JG,I211JCI212JG,I213J A,,I214JE,I215JA,I216JE,I217J | %15
F,,I218JC,I219JF,I220JC,I221J G,,I222JD,I223JG,I224JD,I225J | !>!C,I226J8 |] %17
`;
ABCJS.renderAbc("abc", abcNotation);
</script>
</body>
</html>
"""
#screenshot_path = html_to_image(html_content, chrome_path)
#print(f"Screenshot saved at: {screenshot_path}") |