クリップボードから貼り付けた画像に自動的にスケーリング係数を適用する

HiDPI ディスプレイを 150% のスケーリング係数で使用しています。スクリーンショットを作成して Discourse に貼り付けるたびに、すべてが大きすぎます。見栄えを良くするために、画像に手動でスケーリング係数を適用する必要があります。

サイズが 110x110px の次のボックスのスクリーンショットを作成したと仮定しましょう。

そのスクリーンショットをコンポーザーに貼り付ける (Ctrl+V) と、167x167px の画像が得られます。


![image|167x167](upload://fWfpRZXtBMVBXjcMTAPOwtG5bND.png)

理想的には、正しいパーセンテージを覚えておく必要なく、正しいサイズの画像を取得したいです (私の場合は 66%)。


![image|167x167, 66%](upload://fWfpRZXtBMVBXjcMTAPOwtG5bND.png)

そのためには 2 つのオプションがあります。スケーリング係数が 1 と等しくない場合:

  1. 正しいスケーリング係数を画像 Markdown に自動的に追加します。
    ![image|167x167, 66%](...)

または

  1. プレビューウィンドウの画像ツールボックスに正しいスケーリング係数を追加します。
    image

スケーリング係数は JavaScript で計算できます。

Math.floor(100 / window.devicePixelRatio)
「いいね!」 6

これも素晴らしいアイデアですね。私もいつもこの問題に苦労しています。

独り言ですが、スクリーンショットではない画像をコピー&ペーストした場合、誤検知の原因になりますか?

また、再実装についてですが、1と2の両方を行うことができない理由がわかりません。

「いいね!」 4

はい、スクリーンショットではない画像を貼り付けた場合は誤検知になります。スクリーンショットとその他の画像のどちらがより頻繁に挿入されるのか気になりますね。:thinking:

「いいね!」 1

どちらとも言えませんが、ユーザーや投稿する写真の種類によると思います。時々、携帯電話で画像をコピーしてデスクトップに貼り付けることもあるので、そのようなシナリオもあります。

いずれにしても、オプション2から始めれば誤検出を回避できます。プレビューでより良いデフォルトの代替サイズを提供するだけです。

「いいね!」 1

スクリーンショットツールは、PNGファイルにDPIに関する情報をエンコードしているようです。例えば、高DPIのmacOS環境からスクリーンショットを https://www.metadata2go.com/ にアップロードすると、以下のような情報が表示されます。

HiDpiをオフにすると、これらのメタデータフィールドはファイルから消えるようです。

Windowsでも同様の現象が見られますか?@gerhard さん。もしそうなら、JSで読み取ってピクセル密度を推測する方法があるかもしれません。

また、このgist も参考になるかもしれません。

「いいね!」 2

私もRemote animated PNG lose their animationのためにPNGの最初の数バイトを解析することを検討しているので、ここにはフックの複数のユースケースがあります。

「いいね!」 2

LinuxでSpectacleを使用していますが、メタデータが追加されていないようです。

そのgistのコードは、スケールファクター150%でLinuxシステムに作成したスクリーンショットに対してfalseを返します。その画像のpHYsチャンクは次のようになります。

{ xDpu: 3780, yDpu: 3780, xDpi: 96, yDpi: 96, unit: 'meter' }
「いいね!」 3