# 对从剪贴板粘贴的图像自动应用缩放比例

**URL:** https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889
**Category:** Feature
**Created:** [2023年九月13日 14:42 UTC](https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889 "2023-09-13T14:42:35Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)
#### Post date: [2023年九月13日 14:42 UTC](https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889/1 "2023-09-13T14:42:35Z")

</div>

我使用的是 HiDPI 显示器，缩放比例为 150%。每次我截屏并将其粘贴到 Discourse 中时，一切都显得太大。我需要手动为图像应用缩放比例才能使其看起来正常。

假设我截取了下面这个 110x110 像素的框的屏幕截图。

 ![image](https://global.discourse-cdn.com/meta/original/4X/e/6/3/e63996563e9985401e5f589cc8f2b3784fa96611.png)

当我将该屏幕截图（`Ctrl`+`V`）粘贴到编辑器中时，我得到一个 167x167 像素的图像。

 ![image](https://global.discourse-cdn.com/meta/original/4X/6/f/b/6fb639eefeda26e283e4ea3f8a2bb77cde638909.png)  
`![image|167x167](upload://fWfpRZXtBMVBXjcMTAPOwtG5bND.png)`

理想情况下，我应该得到一个正确尺寸的图像，而无需记住正确的缩小百分比（在本例中为 66%）。

 ![image](https://global.discourse-cdn.com/meta/original/4X/6/f/b/6fb639eefeda26e283e4ea3f8a2bb77cde638909.png)  
`![image|167x167, 66%](upload://fWfpRZXtBMVBXjcMTAPOwtG5bND.png)`

我看到了两种选择。如果缩放比例不等于 1，则：

1. 自动为图像 Markdown 添加正确的缩放比例  
`![image|167x167, 66%](...)`

或者

1. 在预览窗口的图像工具箱中添加正确的缩放比例  
 ![image](https://global.discourse-cdn.com/meta/original/4X/4/5/e/45ecce06ed53fecb70f0d65ec67959605e8d898f.png)

缩放比例可以用 JavaScript 计算：

```javascript
Math.floor(100 / window.devicePixelRatio)

```

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [2023年九月13日 16:28 UTC](https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889/2 "2023-09-13T16:28:24Z")

</div>

这是一个很棒的主意，我一直也为此苦恼。

我一边想一边说，如果用户复制粘贴了一个非截图的图片，这会不会导致误报？

另外，关于重新实现，我不明白为什么我们不能同时实现 1 和 2。

---

<div class="post-metadata">

### Author: ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)
#### Post date: [2023年九月13日 16:46 UTC](https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889/3 "2023-09-13T16:46:38Z")

</div>

是的，粘贴非屏幕截图的图片时会产生误报。我想知道屏幕截图和非屏幕截图的图片哪种插入得更频繁。🤔

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [2023年九月13日 17:04 UTC](https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889/4 "2023-09-13T17:04:37Z")

</div>

不确定，我想这取决于用户以及你发布什么样的照片。有时我会在手机上复制一张图片，然后粘贴到电脑上，所以也有这种情况。

无论如何，从选项 2 开始可以避免误报，它只会为预览提供一个更好的默认备选尺寸。

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2023年九月13日 17:16 UTC](https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889/5 "2023-09-13T17:16:57Z")

</div>

看起来截图工具会将一些关于 DPI 的信息编码到 PNG 文件中。例如，如果我将高 DPI macOS 环境下的截图上传到 [https://www.metadata2go.com/，我会看到](https://www.metadata2go.com/%EF%BC%8C%E6%88%91%E4%BC%9A%E7%9C%8B%E5%88%B0)

 ![SCR-20230913-pxzb](https://global.discourse-cdn.com/meta/original/4X/b/c/c/bcc97431964a1ee478852ece5a52542965f88a28.png)

如果我关闭 HiDpi，那么这些元数据字段似乎会从文件中消失。

@gerhard，你在 Windows 上也看到类似的情况吗？如果看到了，也许我们可以用 JS 读取它并猜测像素密度。

我还发现了 [这个 gist](https://gist.github.com/jorilallo/23282a4887ab8ef166182c1dab1677f0)，可能有用。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2023年九月13日 17:52 UTC](https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889/6 "2023-09-13T17:52:35Z")

</div>

> [@david](#):
>
> 我也发现了[这个 gist](https://gist.github.com/jorilallo/23282a4887ab8ef166182c1dab1677f0)，也许会有用。

我也在研究解析 PNG 的前几个字节，用于[远程动画 PNG 失去动画](https://meta.discourse.org/t/remote-animated-png-lose-their-animation/276435)，所以我们在这里有多个使用钩子的场景。

---

<div class="post-metadata">

### Author: ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)
#### Post date: [2023年九月13日 18:10 UTC](https://meta.discourse.org/t/automatically-apply-scaling-factor-to-images-pasted-from-clipboard/278889/7 "2023-09-13T18:10:20Z")

</div>

我在 Linux 上使用 Spectacle，但它似乎没有向元数据添加任何内容。

- 150% 缩放因子：[https://www.metadata2go.com/result#j=f7c666d9-89bb-4cca-bce1-32109b188ea8](https://www.metadata2go.com/result#j=f7c666d9-89bb-4cca-bce1-32109b188ea8)
- 100%：[https://www.metadata2go.com/result#j=1f4ce715-44a6-4c49-a7f0-5204f84dc8a0](https://www.metadata2go.com/result#j=1f4ce715-44a6-4c49-a7f0-5204f84dc8a0)

> [@david](#):
>
> 我还发现了[这个 gist](https://gist.github.com/jorilallo/23282a4887ab8ef166182c1dab1677f0)，可能很有用。

该 gist 中的代码在我的 Linux 系统上使用 150% 缩放因子创建的屏幕截图返回 `false`。该图像的 `pHYs` 块如下所示：

```js
{ xDpu: 3780, yDpu: 3780, xDpi: 96, yDpi: 96, unit: 'meter' }

```
