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

2024-05-04 12:21:42 +08:00
 Nostalgia
版本:iPhone 12 + iOS 17.4.1 。
自己同时按住调高音量键 + 锁屏键截的图;另外,应该没有对拍照、截图做什么特别设置。
为什么没有统一成一种格式呢?
11530 次点击
所在节点    iPhone
24 条回复
whileFalse
2024-05-04 12:37:52 +08:00
png 是无损压缩,缺点是压缩率低,适合截屏这种只有 200 万像素但充满清晰边缘和文字的图片

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

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

HEVC/HEIF 的专利问题太头疼了,safari 都不支持。也就是 Apple 在 AV1 上掉队了,不然哪天 HEIF 换成 AVIF 也不意外。
lslqtz
2024-05-04 16:06:15 +08:00
截屏可不只有 200 万像素喔...
lslqtz
2024-05-04 16:08:12 +08:00
好吧, 算了一下, 确实是大差不差.
我觉得 png 一方面是历史遗留, 另一方面它的兼容性确实更好.
MYDB
2024-05-04 16:14:12 +08:00
新的格式,新的 kpi ,新的简历页
MrKrabs
2024-05-04 19:06:01 +08:00
@0attocs
safari 什么都支持,heic avif jxl
achira
2024-05-04 21:22:00 +08:00
1 楼这就叫专业
0attocs
2024-05-05 01:30:56 +08:00
@MrKrabs 看了一下,ios 存了那么多年去年九月的 safari 17 终于支持 HEIF 了,
0attocs
2024-05-05 01:33:54 +08:00
@MrKrabs 看了一下,Apple 用了 6 年 HEIF 之后,去年九月的 safari 17 终于支持 HEIF 了。不过 safari 17 也是唯一支持 HEIF 的浏览器。
aero99
2024-05-05 09:21:05 +08:00
长期保存的截图还总是分享的建议 png 格式,能够保留清晰的画质,不像 jpg 分享几次就惨不忍睹了
catalysia
2024-05-05 13:57:26 +08:00
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
2024-05-05 16:04:46 +08:00
@whileFalse 我之前试了下有的图片在 win11 上打不开,咋整?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1037645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX