feat: page size limit

This commit is contained in:
ShawnPhang 2023-07-27 18:54:12 +08:00
parent 0d933530fb
commit 79cda1c4a0
5 changed files with 30 additions and 13 deletions

View File

@ -1,9 +1,9 @@
/* /*
* @Author: ShawnPhang * @Author: ShawnPhang
* @Date: 2020-07-22 20:13:14 * @Date: 2020-07-22 20:13:14
* @Description: * @Description:
* @LastEditors: ShawnPhang <site: book.palxp.com> * @LastEditors: ShawnPhang <site: book.palxp.com>
* @LastEditTime: 2023-07-06 16:00:09 * @LastEditTime: 2023-07-27 17:51:53
*/ */
let path = '/api'; let path = '/api';

View File

@ -1,9 +1,9 @@
/* /*
* @Author: ShawnPhang * @Author: ShawnPhang
* @Date: 2020-07-22 20:13:14 * @Date: 2020-07-22 20:13:14
* @Description: * @Description:
* @LastEditors: ShawnPhang <site: book.palxp.com> * @LastEditors: ShawnPhang <site: book.palxp.com>
* @LastEditTime: 2023-07-06 15:59:58 * @LastEditTime: 2023-07-27 17:51:36
*/ */
const rExpress = require('express'); const rExpress = require('express');
const screenshots = require('../service/screenshots.ts'); const screenshots = require('../service/screenshots.ts');
@ -11,8 +11,11 @@ const api = require('./api.ts');
const rRouter = rExpress.Router(); const rRouter = rExpress.Router();
rRouter.get(api.SCREENGHOT, screenshots.screenshots); rRouter.get(api.SCREENGHOT, screenshots.screenshots);
if (process.env.NODE_ENV === 'development') {
rRouter.get(api.PRINTSCREEN, screenshots.printscreen); rRouter.get(api.PRINTSCREEN, screenshots.printscreen);
rRouter.get(api.GETIMAGE, screenshots.getImg); rRouter.get(api.GETIMAGE, screenshots.getImg);
}
module.exports = rRouter; module.exports = rRouter;

View File

@ -3,7 +3,7 @@
* @Date: 2021-09-30 14:47:22 * @Date: 2021-09-30 14:47:22
* @Description: * @Description:
* @LastEditors: ShawnPhang <site: book.palxp.com> * @LastEditors: ShawnPhang <site: book.palxp.com>
* @LastEditTime: 2023-07-17 18:03:57 * @LastEditTime: 2023-07-27 18:38:33
*/ */
const isDev = process.env.NODE_ENV === 'development' const isDev = process.env.NODE_ENV === 'development'
const puppeteer = require('puppeteer') const puppeteer = require('puppeteer')
@ -25,10 +25,17 @@ 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) {
// 限制器超出规格会降低dpr输出节省服务器资源
return w*h < maxPXs ? 1 : +(1/(w*h) * maxPXs).toFixed(2)
}
page.setViewport({ page.setViewport({
width: Number(width), width: Number(width),
height: Number(height), height: Number(height),
deviceScaleFactor: !isNaN(scale) ? (+scale > 4 ? 4 : +scale) : 1, deviceScaleFactor: !isNaN(scale) ? (+scale > 4 ? 4 : +scale) : limiter(Number(width), Number(height)),
}) })
ua && page.setUserAgent(ua) ua && page.setUserAgent(ua)
if (devices) { if (devices) {

View File

@ -45,6 +45,7 @@ export default {
step: { step: {
default: 1, default: 1,
}, },
maxValue: {},
}, },
emits: ['finish', 'update:modelValue'], emits: ['finish', 'update:modelValue'],
data() { data() {
@ -66,12 +67,18 @@ export default {
methods: { methods: {
fixedNum() { fixedNum() {
// //
const num = String(this.modelValue).split('.')[1] const decimal = String(this.modelValue).split('.')[1]
if (num && num.length > 2) { if (decimal && decimal.length > 2) {
setTimeout(() => { setTimeout(() => {
this.updateValue(Number(this.modelValue).toFixed(2)) this.updateValue(Number(this.modelValue).toFixed(2))
}, 10) }, 10)
} }
//
if (this.maxValue && this.modelValue > this.maxValue) {
setTimeout(() => {
this.updateValue(Number(this.maxValue))
}, 10)
}
}, },
updateValue(value) { updateValue(value) {
this.$emit('update:modelValue', value) this.$emit('update:modelValue', value)

View File

@ -3,8 +3,8 @@
<el-collapse v-model="activeNames"> <el-collapse v-model="activeNames">
<el-collapse-item title="画布尺寸" name="1"> <el-collapse-item title="画布尺寸" name="1">
<div class="position-size"> <div class="position-size">
<number-input v-model="innerElement.width" label="宽" @finish="(value) => finish('width', value)" /> <number-input v-model="innerElement.width" label="宽" :maxValue="5000" @finish="(value) => finish('width', value)" />
<number-input v-model="innerElement.height" label="高" @finish="(value) => finish('height', value)" /> <number-input v-model="innerElement.height" label="高" :maxValue="5000" @finish="(value) => finish('height', value)" />
</div> </div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="背景设置" name="2"> <el-collapse-item title="背景设置" name="2">