fix: support scale for screenshot clips (#8908)

Closes #5329
This commit is contained in:
Alex Rudenko 2022-09-07 07:27:40 +02:00 committed by GitHub
parent 053d960fb5
commit 260e428227
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 48 additions and 11 deletions

View File

@ -13,8 +13,9 @@ export interface ScreenshotClip
## Properties
| Property | Modifiers | Type | Description |
| ---------------------------------------------- | --------- | ------ | ----------- |
| ---------------------------------------------- | --------- | ------ | ----------------- |
| [height](./puppeteer.screenshotclip.height.md) | | number | |
| [scale?](./puppeteer.screenshotclip.scale.md) | | number | <i>(Optional)</i> |
| [width](./puppeteer.screenshotclip.width.md) | | number | |
| [x](./puppeteer.screenshotclip.x.md) | | number | |
| [y](./puppeteer.screenshotclip.y.md) | | number | |

View File

@ -0,0 +1,13 @@
---
sidebar_label: ScreenshotClip.scale
---
# ScreenshotClip.scale property
**Signature:**
```typescript
interface ScreenshotClip {
scale?: number;
}
```

View File

@ -163,6 +163,10 @@ export interface ScreenshotClip {
y: number;
width: number;
height: number;
/**
* @defaultValue 1
*/
scale?: number;
}
/**
@ -3012,7 +3016,12 @@ export class Page extends EventEmitter {
const result = await this.#client.send('Page.captureScreenshot', {
format,
quality: options.quality,
clip,
clip: clip
? {
...clip,
scale: clip.scale === undefined ? 1 : clip.scale,
}
: undefined,
captureBeyondViewport,
fromSurface,
});
@ -3044,14 +3053,12 @@ export class Page extends EventEmitter {
}
return buffer;
function processClip(
clip: ScreenshotClip
): ScreenshotClip & {scale: number} {
function processClip(clip: ScreenshotClip): ScreenshotClip {
const x = Math.round(clip.x);
const y = Math.round(clip.y);
const width = Math.round(clip.width + clip.x - x);
const height = Math.round(clip.height + clip.y - y);
return {x, y, width, height, scale: 1};
return {x, y, width, height, scale: clip.scale};
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -52,6 +52,22 @@ describe('Screenshots', function () {
});
expect(screenshot).toBeGolden('screenshot-clip-rect.png');
});
itFailsFirefox('should use scale for clip', async () => {
const {page, server} = getTestState();
await page.setViewport({width: 500, height: 500});
await page.goto(server.PREFIX + '/grid.html');
const screenshot = await page.screenshot({
clip: {
x: 50,
y: 100,
width: 150,
height: 100,
scale: 2,
},
});
expect(screenshot).toBeGolden('screenshot-clip-rect-scale2.png');
});
itFailsFirefox(
'should get screenshot bigger than the viewport',
async () => {