[英]Export High Resolution Browser Screenshot
對於我一直從事的 Blazor WASM 項目,我使用了這個名為Blazor Diagrams的偉大開源項目。 客戶希望我導出圖表的屏幕截圖,但要注意的是屏幕截圖應該是圖表的全分辨率,這幾乎總是比瀏覽器 window 的分辨率更高。例如,假設 div 包含圖表寬度為 900 像素以適合瀏覽器,但整個圖表寬度為 2500 像素。 我想拍攝一張 2500 像素寬的圖像。
我研究了各種選擇,例如
Html2canvas 不能很好地與 Blazor 配合使用,如果我理解正確的話,getDisplayMedia 將是用於像素捕獲的像素。
由於保密原因,我認為我們無法使用第 3 方 API,所以我想知道我的選擇是什么。
大多數(如果不是全部)javascript 屏幕到圖像,Dom 到圖像庫缺乏完整的 svg 支持,並且與 css 等有一些怪癖。最好是與劇作家或 bunit 一起發揮創意,在舞台環境中獲取 output html 以獲得最佳效果結果。 目前我們遇到了所有提到的問題,但已經以其他方式解決了它,沒有/最小 javascript 依賴項。
使用 Blazor 服務器端,webassembly 可能是不同的情況
萬一有人遇到這個並發現這很有用,這就是我所做的。 我的項目是托管在 IIS 服務器上的 Blazor WASM。
IIS的一些小技巧
在我們的場景中,我最終將控制台應用程序 exe 放在根網站文件夾中,因為 Node 需要讀/寫訪問權限並且在子文件夾中拋出錯誤。
我使用以下代碼在首次運行時僅安裝 chrome 瀏覽器。 這樣,所有編劇代碼都位於我的 Diagram Export 應用程序文件夾中。
string imagesFolderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images");
string browserFolderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "browser");
if (!Directory.Exists(imagesFolderPath))
{
Directory.CreateDirectory(imagesFolderPath);
Console.WriteLine("Created images folder", imagesFolderPath);
}
if (!Directory.Exists(browserFolderPath))
{
Directory.CreateDirectory(browserFolderPath);
Console.WriteLine("Created browser'{0}'", browserFolderPath);
}
Console.WriteLine("Checking dependencies");
Environment.SetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH", browserFolderPath);
Environment.SetEnvironmentVariable("PLAYWRIGHT_NODEJS_PATH", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ".playwright\\node\\win32_x64\\node.exe"));
Microsoft.Playwright.Program.Main(new[] { "install","chromium" });
必須使用 playwright 的自動等待功能來確保在截取屏幕截圖之前頁面已完全呈現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.