为什么 X 剪贴板将 JPG 图像存储为大文件?

为什么 X 剪贴板将 JPG 图像存储为大文件?

我一直在研究 Linux 设置上 X 剪贴板的奇怪行为。

我最初从网络浏览器复制了一张图像,后来在保存文件时发现该图像为 JPG 格式。但是,当我尝试将浏览器中复制的图像粘贴到 WhatsApp 中时,遇到一条错误消息:“您尝试添加的一张图像大于 16MB 限制。”

为了诊断这个问题,我采取了以下步骤:

直接图像保存:

  • 直接从浏览器保存图像:结果为 1.7MB JPG。

剪贴板检查(初始):

  • 用于xclip检查剪贴板内容。
  • 发现图片被text/html格式引用了。输出中最初没有可用的 PNG 格式-t TARGETS
    $ xclip -o selection clipboard -t TARGETS
    TIMESTAMP
    TARGETS
    MULTIPLE
    text/html
    text/_moz_htmlcontext
    text/_moz_htmlinfo
    UTF8_STRING
    COMPOUND_TEXT
    TEXT
    STRING
    text/plain;charset=utf-8
    text/plain
    text/x-moz-url-priv
    
  • 上述目标中的其他选项不适用于 error Error: target ... not available。经检查目标为text/html
    $ xclip -o -selection clipboard -t text/html
    <meta http-equiv="content-type" content="text/html; charset=utf-8"><img src="https://i.redd.it/678a4i8vv7l01.jpg" alt="Flashed Libreboot to X200 using BeagleBone Black : thinkpad" class=" nofocus" tabindex="0" aria-label="Flashed Libreboot to X200 using BeagleBone Black : thinkpad" role="button">
    

剪贴板大小:

  • 经过进一步检查,我发现剪贴板存储的是PNG格式的图像,大小超过16MB。
  • 禁用互联网,从 Firefox 浏览器复制图像。
  • 尝试在离线状态下粘贴,但现在image/png已启用目标。我将图像保存到文件中:
    $ xclip -o -selection clipboard -t image/png > /ramdisk/extracted_image.png
    
    现在,image/png所有复制的图像都启用了目标。

剪辑曼测试:

  • 禁用 Clipman 并再次尝试复制,但粘贴到 WhatsApp 时仍然存在较大的 PNG 问题。

GIMP 测试:

  • 将图像复制到 GIMP 中。
  • xclip现在显示与 PNG 相关的目标。

图像提取:

  • 从剪贴板中提取图像:生成 18.1MB PNG。

    $ \ls -l /ramdisk/extracted_image.png 
    -rw-r--r-- 1 sourav sourav 18134833 Aug 16 19:44 /ramdisk/extracted_image.png
    
  • Clipman 的缓存版本是稍小的 16MB PNG。

    $ \ls -l ~/.cache/xfce4/clipman/image0.png 
    -rw-r--r-- 1 sourav sourav 600951 Aug 16 20:55 /home/sourav/.cache/xfce4/clipman/image0.png
    

压缩检查:

  • pngcheck在两个图像上 运行。
    $ pngcheck /home/sourav/.cache/xfce4/clipman/image0.
    OK: /home/sourav/.cache/xfce4/clipman/image0.png (4896x3264, 32-bit RGB+alpha, non-interlaced, 74.8%).
    
    $ pngcheck /ramdisk/extracted_image.png
    OK: /ramdisk/extracted_image.png (4896x3264, 32-bit RGB+alpha, non-interlaced, 71.6%).
    

Exiftool 检查:

  • exiftool在两个图像上 运行。
    $ exiftool /ramdisk/extracted_image.png /home/sourav/.cache/xfce4/clipman/image0.png
    ======== /ramdisk/extracted_image.png
    ExifTool Version Number         : 12.60
    File Name                       : extracted_image.png
    Directory                       : /ramdisk
    File Size                       : 18 MB
    File Modification Date/Time     : 2023:08:16 19:44:02+05:30
    File Access Date/Time           : 2023:08:16 19:43:59+05:30
    File Inode Change Date/Time     : 2023:08:16 19:44:02+05:30
    File Permissions                : -rw-r--r--
    File Type                       : PNG
    File Type Extension             : png
    MIME Type                       : image/png
    Image Width                     : 4896
    Image Height                    : 3264
    Bit Depth                       : 8
    Color Type                      : RGB with Alpha
    Compression                     : Deflate/Inflate
    Filter                          : Adaptive
    Interlace                       : Noninterlaced
    Significant Bits                : 8 8 8 8
    Image Size                      : 4896x3264
    Megapixels                      : 16.0
    ======== /home/sourav/.cache/xfce4/clipman/image0.png
    ExifTool Version Number         : 12.60
    File Name                       : image0.png
    Directory                       : /home/sourav/.cache/xfce4/clipman
    File Size                       : 16 MB
    File Modification Date/Time     : 2023:08:16 19:50:18+05:30
    File Access Date/Time           : 2023:08:16 19:50:11+05:30
    File Inode Change Date/Time     : 2023:08:16 19:50:18+05:30
    File Permissions                : -rw-r--r--
    File Type                       : PNG
    File Type Extension             : png
    MIME Type                       : image/png
    Image Width                     : 4896
    Image Height                    : 3264
    Bit Depth                       : 8
    Color Type                      : RGB with Alpha
    Compression                     : Deflate/Inflate
    Filter                          : Adaptive
    Interlace                       : Noninterlaced
    Significant Bits                : 8 8 8 8
    Image Size                      : 4896x3264
    Megapixels                      : 16.0
        2 image files read
    

从上述步骤可以看出,剪贴板将 JPG 图像存储为更大的 PNG 图像。这让我想到几个问题:

  • 是什么导致了这种转变?是浏览器、X 系统还是其他工具?
  • 为什么该图像最初仅以格式提供text/html,后来以 PNG 格式下载?
  • 剪贴板存储的确切数据是什么导致图像大小如此显着增大?

相关内容