mirror of
https://github.com/palxiao/poster-design.git
synced 2025-07-03 03:56:41 +08:00
code: save server resources
This commit is contained in:
parent
1f3bb8be8a
commit
5a89f6440a
@ -2,14 +2,18 @@
|
|||||||
* @Author: ShawnPhang
|
* @Author: ShawnPhang
|
||||||
* @Date: 2021-09-30 14:47:22
|
* @Date: 2021-09-30 14:47:22
|
||||||
* @Description: 下载图片(单浏览器版,适用于低配置服务器)
|
* @Description: 下载图片(单浏览器版,适用于低配置服务器)
|
||||||
* @LastEditors: ShawnPhang <site: m.palxp.cn>
|
* @LastEditors: ShawnPhang <https://m.palxp.cn>
|
||||||
* @LastEditTime: 2023-07-27 18:38:33
|
* @LastEditTime: 2023-09-12 11:18:10
|
||||||
*/
|
*/
|
||||||
const isDev = process.env.NODE_ENV === 'development'
|
const isDev = process.env.NODE_ENV === 'development'
|
||||||
const puppeteer = require('puppeteer')
|
const puppeteer = require('puppeteer')
|
||||||
const images = require('images')
|
const images = require('images')
|
||||||
const { executablePath } = require('../configs.ts')
|
const { executablePath } = require('../configs.ts')
|
||||||
const forceTimeOut = 60 // 强制超时时间,单位:秒
|
const forceTimeOut = 60 // 强制超时时间,单位:秒
|
||||||
|
// 4K规格,总计约830万像素 3840 * 2160 2K规格,总计约830万像素 2048 * 1080
|
||||||
|
// const maxPXs = 8294400
|
||||||
|
const maxPXs = 4211840 // 超出此规格会触发限制器降低dpr,节省服务器资源
|
||||||
|
const maximum = 5000 // 最大宽高限制,超过截断以防止服务崩溃
|
||||||
|
|
||||||
const saveScreenshot = async (url: string, { path, width, height, thumbPath, size = 0, quality = 0, prevent, ua, devices, scale, wait }: any) => {
|
const saveScreenshot = async (url: string, { path, width, height, thumbPath, size = 0, quality = 0, prevent, ua, devices, scale, wait }: any) => {
|
||||||
return new Promise(async (resolve: Function) => {
|
return new Promise(async (resolve: Function) => {
|
||||||
@ -25,16 +29,12 @@ const saveScreenshot = async (url: string, { path, width, height, thumbPath, siz
|
|||||||
// 打开页面
|
// 打开页面
|
||||||
const page = await browser.newPage()
|
const page = await browser.newPage()
|
||||||
// 设置浏览器视窗
|
// 设置浏览器视窗
|
||||||
// 4K规格,总计约830万像素 3840 * 2160 2K规格,总计约830万像素 2048 * 1080
|
|
||||||
// const maxPXs = 8294400
|
|
||||||
const maxPXs = 4211840
|
|
||||||
function limiter(w: number, h: number) {
|
function limiter(w: number, h: number) {
|
||||||
// 限制器,超出规格会降低dpr输出,节省服务器资源
|
|
||||||
return w*h < maxPXs ? 1 : +(1/(w*h) * maxPXs).toFixed(2)
|
return w*h < maxPXs ? 1 : +(1/(w*h) * maxPXs).toFixed(2)
|
||||||
}
|
}
|
||||||
page.setViewport({
|
page.setViewport({
|
||||||
width: Number(width),
|
width: Number(width) > maximum ? 5000 : Number(width),
|
||||||
height: Number(height),
|
height: Number(height) > maximum ? 5000 : Number(height),
|
||||||
deviceScaleFactor: !isNaN(scale) ? (+scale > 4 ? 4 : +scale) : limiter(Number(width), Number(height)),
|
deviceScaleFactor: !isNaN(scale) ? (+scale > 4 ? 4 : +scale) : limiter(Number(width), Number(height)),
|
||||||
})
|
})
|
||||||
ua && page.setUserAgent(ua)
|
ua && page.setUserAgent(ua)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user