V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Nostalgia
V2EX  ›  iPhone

为什么在 iPhone 上截图文件格式是 .PNG,而拍照格式是 .HEIC?

  •  
  •   Nostalgia · 236 天前 · 8697 次点击
    这是一个创建于 236 天前的主题,其中的信息可能已经有所发展或是发生改变。
    版本:iPhone 12 + iOS 17.4.1 。
    自己同时按住调高音量键 + 锁屏键截的图;另外,应该没有对拍照、截图做什么特别设置。
    为什么没有统一成一种格式呢?
    24 条回复    2024-05-06 01:44:22 +08:00
    whileFalse
        1
    whileFalse  
       236 天前 via Android   ❤️ 37
    png 是无损压缩,缺点是压缩率低,适合截屏这种只有 200 万像素但充满清晰边缘和文字的图片

    HEIC 是 jpeg 的进化,压缩率高但硬性边缘会出现伪影和抖动,适合照片这种几千万像素而且通常相邻像素过度平滑的图片
    xJogger
        2
    xJogger  
       236 天前 via Android
    @whileFalse 思考,那理论上是不是用手机拍摄另一个手机的屏幕时,其实 jpg 也会有伪影和抖动
    whileFalse
        3
    whileFalse  
       236 天前
    @xJogger 把截屏的 png 转换为 jpg 再放大到 1:1 就能看到
    xJogger
        4
    xJogger  
       236 天前
    @whileFalse 哦哦,原来如此,层主牛逼!
    butanediol2d
        5
    butanediol2d  
       236 天前 via Android
    @whileFalse 可是 HEIC 也支持无损啊
    icyalala
        6
    icyalala  
       236 天前   ❤️ 1
    @butanediol2d https://arxiv.org/pdf/2108.02557 HEIC 无损压缩率和速度反而不如 PNG
    owen666
        7
    owen666  
       236 天前
    png 很早就有了。拍照早期是 jpeg 格式,后来才变成 heic 和 jpeg 共存。看你设置如何选,如果选最佳兼容性,就还是 jpeg 格式。
    1423
        8
    1423  
       236 天前
    图形与图像
    kenvix
        9
    kenvix  
       236 天前   ❤️ 1
    @butanediol2d #5 实际上把有损压缩算法调成无损模式一般表现都会比专门的无损算法要差
    0attocs
        10
    0attocs  
       236 天前 via iPhone   ❤️ 1
    格式上当然是可以统一的,只要有损无损、图形图像用不同的算法、配置就可以了,装在同一个容器里。比如 JPEG XL (.jxl )的无损模式( modular mode )就是无损格式 FLIF/FULF 演变来的,比 PNG 小 30%;而 jxr 的有损模式( varDCT )就是另一套算法了。

    至于 HEIF (.heic ),它是 HEVC 的单帧形式,天生没有考虑兼容另一套无损压缩算法。再加上专利问题,Apple 也不好魔改,所以就留着 png 没有统一了。

    HEVC/HEIF 的专利问题太头疼了,safari 都不支持。也就是 Apple 在 AV1 上掉队了,不然哪天 HEIF 换成 AVIF 也不意外。
    lslqtz
        11
    lslqtz  
       236 天前
    截屏可不只有 200 万像素喔...
    lslqtz
        12
    lslqtz  
       236 天前
    好吧, 算了一下, 确实是大差不差.
    我觉得 png 一方面是历史遗留, 另一方面它的兼容性确实更好.
    MYDB
        13
    MYDB  
       236 天前 via iPhone
    新的格式,新的 kpi ,新的简历页
    MrKrabs
        14
    MrKrabs  
       236 天前
    @0attocs
    safari 什么都支持,heic avif jxl
    achira
        15
    achira  
       236 天前
    1 楼这就叫专业
    0attocs
        16
    0attocs  
       235 天前 via iPhone
    @MrKrabs 看了一下,ios 存了那么多年去年九月的 safari 17 终于支持 HEIF 了,
    0attocs
        17
    0attocs  
       235 天前 via iPhone
    @MrKrabs 看了一下,Apple 用了 6 年 HEIF 之后,去年九月的 safari 17 终于支持 HEIF 了。不过 safari 17 也是唯一支持 HEIF 的浏览器。
    aero99
        18
    aero99  
       235 天前
    长期保存的截图还总是分享的建议 png 格式,能够保留清晰的画质,不像 jpg 分享几次就惨不忍睹了
    catalysia
        19
    catalysia  
       235 天前   ❤️ 3
    png 是一种压缩的位图图像 它的本质是把一张位图和蒙版以及附加信息伽马矫正等用 lzw 压缩打了个包,显示时是在解压缩
    而 heif 则是一种帧图像,它本质是一个视频

    png 会存储每一个像素对应的亮度信息和色彩信息
    而 heif 则是存储一个像素与临近像素以及前后帧像素的差别

    理论上,两者都使用无损压缩并在绝对正确的情况下应该能都能复现出原本的图像
    但是因为不同 HEVC 解码器在追求性能,宽容性和显示效果存在一定的区别
    所以有可能同一个 heif 文件在不同的设备的不同的 HEVC 解码器下复现出不同的图像

    比如早年间的 n 卡就因为不支持 HEVC 硬件解码 使用 cuda 跑解码的话就会丢失一部分色彩信息
    大部分的安卓电视也会在处理 HEVC 解码图像时,将信号重采样到 4:2:0 8bitFRC 处理 再还原为 4:4:4 10bit 以实现比如黑色增强 升格 和补帧等功能

    这在照片或者视频中是可以接受的 因为 少到 70%~80%的色彩信息和一半的亮度信息人肉眼几乎也看不出来

    但是截图就不一样了,前端工程师可能就在某个犄角旮旯里弄了一个 1 像素的小蓝点,但是解码器给它漏掉了。
    然后 debug 一下午都找不到为啥没那个点。
    再或者客户让你吸一下某个点的绿色,结果你吸出来是橙色。

    此时 png 存储绝对的像素点的色彩信息 并按照 ISO / IEC 15948:2003 规范复现就是必要的

    所以截图要用 png 而照片视频( livephoto )用 heif
    Ccf
        20
    Ccf  
       235 天前
    @whileFalse 我之前试了下有的图片在 win11 上打不开,咋整?
    Nostalgia
        21
    Nostalgia  
    OP
       235 天前
    @aero99 这个是不是取决于分享到的平台( eg. 微信)在下载/存储图片时是否有压缩、跟具体的图片格式没关系?
    catalysia
        22
    catalysia  
       235 天前   ❤️ 2
    @Nostalgia 考虑到兼容性问题和性能开销(主要是处理 png 的 alpha 蒙版有多个不同版本的规范而且相互还是完全不一样的处理方式 错误的操作会丢失透明色) 大部分软件都不会对 png 进行有损压缩或者重采样 所以虽然名义上压缩和重采样是软件的锅 但实际上的确 png 就很少会被压缩和重采样 jpeg 因为广泛的使用 也没有透明度的问题 所以就容易被压缩和重采样
    这里一个例子是微信的 6.6 版本时候搞过一次对 png 的重采样以节约带宽,结果搞得一大堆 png 图像 alpha 蒙版变成了纯黑色。被用户投诉从 6.6.1 一直修到 6.6.7 都没搞好,最后摆烂不重采样了,直接禁止过大的 png 发送。

    至于 heif 更不用说了 这个格式的一大特点就是对重采样 压缩 以及深度映射 描述修正特别友好的一个格式
    heif 允许文件本身就集成多个重采样的缩略图,甚至序列,可以直接通过丢弃较大图 序列 曝光信息 派生图像 色彩信息 亮度信息 等等来压缩,简单到直接改一下 exif 和 xmp 信息就行 分享时软件就会直接丢弃对应的信息 这导致 heif 变成了被修改的重灾区,现在不明显只是使用的人少而已


    这种情况有点类似 ios 和安卓的软件生态 垃圾流氓软件的确是开发商的锅 但实际上 ios 因为限制多生态要比安卓生态流氓软件少也是事实 毕竟你开放了功能就不能阻止别人去用
    Nostalgia
        23
    Nostalgia  
    OP
       234 天前 via iPhone
    @catalysia 老哥太专业了!
    catalysia
        24
    catalysia  
       234 天前   ❤️ 1
    另外再补充一下 因为 heif 的功能强大,还导致了一个性能开销的问题

    大部分的 hevc 编码器 解码器 以及对应的工作流 滤镜 无论硬件的 软件的 为了节约性能开销 都会重采样

    上面也提到,很多安卓电视机为了能实现 黑色增强 升格 补帧等效果 会将信号重采样到 4:2:0 8bitFRC 处理 再还原为 4:4:4 10bit 来输出

    其实你拍摄的相机 用的软件 甚至传输过程中都有可能被重采样以节约性能开销 即使使用 Apple ProRes 4:4:4 格式也没用

    一个巨大的 png 文件打开的时候,如果软件处理不过来就会卡死
    一个巨大的 hevc 编码的文件被打开的时候,却总是能打开,软件就像一个黑盒 在哪一步优化了根本没人知道 甚至软件的作者都不知道,他们可能是调用的第三方解码器,也可能是调用的显卡的硬件解码器,也可能是系统的解码器
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1421 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:25 · PVG 01:25 · LAX 09:25 · JFK 12:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.