跳到主要内容

DNG 转 JPG

Adobe 的开放 RAW 格式,读它却不需要 Adobe。

DNG 转 JPG 把一个 RAW 文件变成一张普通的 JPEG,你其余的软件都能打开。手机、徕卡机身和多数无人机写的是 DNG;能读它的东西却很少。整个转换都在这个标签页里发生,文件的任何部分都不会被发到别处。

文件不会离开这个标签页。读取它、解码它、写出结果,全都发生在你的机器上;你可以把网断掉再照常用这个工具,自己验证这一点。

工具

把图片拖到这里

也可以粘贴一张,或者选择文件。一次多张也没问题。

转换在你自己的机器上、在这个标签页里完成,所以它必须靠 JavaScript 才能进行。这里没有任何服务器可以代劳。

0.92

本次转换

是取出来,不是冲洗出来,这个区别很重要。

你硬盘上的 DNG 不一定是从相机里就这样出来的。Adobe 的转换器能把 CR2 或 NEF 变成 DNG,摄影师会把整场拍摄都过一遍,好让存档待在一种有文档的格式里,而不是某个厂商的私有方言里。iPhone 的 ProRAW 又是另一回事:苹果照常跑完它那套处理,Deep Fusion 之类的都在内,再把结果写成 DNG。不管哪一种,文件里都在传感器数据旁边带着一张渲染好的预览图,这个工具读的就是那张预览图。

JPEG 对接收它的一端没有任何要求,DNG 则要求对方有一个修图软件。出来的是写这个 DNG 的人当初选择存进去的东西,而那不一定是全分辨率。Adobe 的转换器可以只放一张中等尺寸的预览,或者干脆一张都不放,所以在别人电脑上做出来的 DNG,交回来的图像可能比传感器记录的要小。RAW 数据留在原处,所以关于曝光和色彩的每一个决定,都是在文件写下之前由相机做出的。

文件去了哪里

哪里都没去。

搜出来的转换工具大多是一个上传表单。你把文件交出去,服务器替你转换,然后你只能相信那份副本已经被删掉了。转换一张图像根本不需要这些,所以这里不这么做。

  • 这里没有服务器

    转换过程中,这个页面不会发出任何请求。转换器里任何地方都没有对 fetch、XMLHttpRequest、WebSocket、EventSource 或 sendBeacon 的调用,也不会往 cookie、本地存储、会话存储或数据库里写任何东西。

  • 元数据会被去掉

    手机拍的照片里带着你当时站立位置的坐标、按下快门的那一秒,以及拍它的那台相机。这些默认会被移除,而结果会告诉你里面原本有什么,让这成为你的选择,而不是一个意外。

  • 你可以自己验证

    把网断掉,转一张试试。它照样能用。本页下面的单文件版本更进一步:你下载一次,然后从自己的硬盘上打开它,完全不需要连接。

  • 代码你可以自己读

    转换器是一个独立的开源软件包,没有运行时依赖,以 MIT 许可发布。这里的隐私说法出自你能自己读的代码,而不是一句你只能接受的承诺。

格式

能进来什么,能出去什么。

常见的那些在这里,是因为大家需要它们。麻烦的那些在这里,是因为手上有一份扫描的 TIFF、一个 Photoshop 文件或者一整个文件夹的相机 RAW 的人,找不到一个不要求先上传的去处。

可读取

HEIC 与 HEIF、PNG、APNG、JPEG、JPEG XL、WebP、AVIF、GIF、BMP、ICO、TIFF、Photoshop 的 PSD 与 PSB、相机 RAW、DDS、Radiance HDR、OpenEXR、PCX、Apple icon 图标集、Sun raster、XBM、XPM、QOI、TGA、PNM 和 farbfeld,另外还有由浏览器渲染的 SVG。格式是从字节判断出来的,而不是看文件名,因为经聊天应用转发的照片常常叫 image.jpg,里面装的却是 HEIC。

可写出

PNG、APNG、JPEG、WebP、AVIF、GIF、TIFF、BMP、ICO、Apple 图标集、PCX、Sun raster、XBM、XPM、Radiance HDR、OpenEXR、QOI、TGA、PNM 和 farbfeld。Safari 无法写出 WebP,它从未支持过;AVIF 需要浏览器自带 AV1 编码器,Chrome 和 Edge 都有。两种情况工具都会明说,而不是把一个改了名字的 PNG 交给你。

动画会保留每一帧

一张动态 GIF 转成 APNG 会保留每一帧,反过来也一样。转成静态格式时保留第一帧,并且会告诉你,而不是一声不吭地把其余的帧丢掉。

HDR 照片依然是 HDR

手机拍的 HDR 照片,是一张普通图像加上一张更小的图,后者说明每个部分该提亮多少。转换为 AVIF 时两张都会写进文件,连同把它们联系起来的参数,原样复制而不是重新计算。转换为其他格式则得到标准动态范围的画面,并会有一行说明。Radiance HDR 与 OpenEXR 是另一回事,它们之间互转会保留完整范围。

相机 RAW,实话实说

RAW 文件里存的是传感器数据,要靠修图软件把它冲洗成一张照片,这个工具不做那件事。它做的是把相机自己生成、并放进文件里的全尺寸 JPEG 取出来。当你只想从一个 CR2 或 NEF 里拿出那张照片,又不想打开什么大软件时,要的就是这个。

PNG 是这里写的,不是浏览器写的

这意味着没有用到透明度时,它会把那条通道去掉,会嵌入原本的色彩配置文件,也不会撞上任何尺寸上限。对手机照片来说,出来的文件比浏览器做出来的更小。

图标与 favicon

一个 ICO 不是一张图。它是一份小目录,装着同一张图像的好几个尺寸,这样浏览器就能拿 16 像素的那张放在标签上,拿 32 像素的那张放在书签上,网站图标就是这么回事。这里写出 256、128、64、48、32 和 16 像素的条目,而 256 就是 ICO 的上限,因为那份目录用一个字节记录每条边。Apple 图标套件(ICNS)的写法一样,最大到 1024,凡是有两种写法的尺寸,普通版和视网膜版都会带上。从方形的东西开始:每个槽位都是正方形,所以一张横构图的照片回来时会居中放在正方形里,两边是透明的。

它不会做的事

它不会写出 HEIC。没有浏览器做得到,而且其编码器受专利限制,免费工具无法解决。它读取 Photoshop 和 DDS 但不写出,因为读取别人已有的文件是有用的,而写坏一个文件,对方往往一个月后才发现不对。AVIF 以每通道 8 位输出,因为没有浏览器能编码 10 位 AV1,所以没有 PQ 或 HLG 输出。HDR 照片并不需要它,这也是它仍能保留下来的原因。

难办的那个

一个 HEIC 不是一张图,而是几十张。

大多数格式就是一张图像,前面加个文件头,转换起来没什么好说的。HEIC 是例外,值得走一遍,因为把你带到这里来的多半就是它。它是把视频压缩用在了一张静态图像上,装在 MP4 用的那种容器里;有意思的地方在于浏览器居然能读它:解码器它本来就有。

  1. 01这个文件是一个容器,和 MP4 用的是同一种。里面是一张条目清单:图像本身、一张缩略图、相机元数据,在较新的 iPhone 上还有一层用于高动态范围的额外数据。
  2. 02图像本身是一张由 512 乘 512 的小块拼成的网格。一张 1200 万像素的照片是 48 块,横八块、竖六块;4800 万像素的接近两百块。一个指望拿到单张图像的读取程序,在里面找不到任何能用的东西。
  3. 03每一块的压缩方式和视频的一帧一样。工具把这些小块取出来,交给浏览器内置的视频解码器;在大多数机器上,那是一块专门的硬件,所以这件事只要一会儿,而不是一分钟。
  4. 04网格会补齐到整块,所以它比照片本身更大。真实尺寸另外记录,补出来的部分之后会裁掉。
  5. 05旋转是存在图像旁边的,而不是应用到图像上的。手机拍的每一张竖构图照片,实际上都是躺着存的,所以忽略这一点的转换工具会给你一张横倒的图。
  6. 06iPhone 拍的照片用的是 Display P3,色彩范围比大多数文件默认的 sRGB 更宽。工具会读出文件用的是哪一个,并把色彩配置文件一并带过去,所以结果不会看起来发灰。

为什么有些浏览器需要帮忙

Safari 自己就能读 HEIC。只要机器上有对应的硬件,Chrome 和 Edge 就会开放读它所需的视频解码器,而大多数机器都有。Firefox 两者都不提供。在这些浏览器上,这个页面会改为加载一个软件解码器,它到哪里都能用,但更慢;结果里会说明什么时候走的这条路,好让一次慢转换有个解释,而不是莫名其妙。

离线

同一个转换器,做成你硬盘上的一个文件。

把这份文档保存下来,断开连接,它照样能转换你的图像。它运行的每一样东西都写在这个文件里面,所以没有需要连的服务器,你保存之后也不存在会变的版本。

文件

独立构建版

转换器和它的界面装在一份 HTML 文档里。二十六种格式可以进来,而它不带任何一种运行时依赖。

许可
MIT
从版本发布列表下载
  • 脚本和样式表都写进了页面里

    构建过程会编译转换器、压缩样式表,然后把两者都写进文档正文。没有任何东西需要拉取,因为已经没有什么可拉取了。这也是为什么一份文档比你平常加载的页面更重:你拿到的是程序本身,而不是指向它的一个地址。

  • 这个文件不会运行它出厂时没带的代码

    构建时会按脚本和样式表落进文档时的样子算出它们的哈希,再把两个哈希写进文件自己头部的 Content-Security-Policy 里。同一条策略把 connect-src 设成了 none,所以这份文档根本不被允许发起网络连接。把脚本改掉一个字符,它就跑不起来了,因为哈希对不上了。

  • 这里没有可以关掉的联网代码

    转换器里任何地方都没有调用 fetch、XMLHttpRequest、WebSocket、EventSource 或 sendBeacon,也不往 cookie、本地存储、会话存储或数据库里写任何东西。软件包里有一项测试会读取构建出来的文件,其中只要出现任何一个,这次发布就不通过,所以这是每次构建都验一遍,而不是只承诺一次。

  • 它不会自己更新

    这就是这种做法的代价,值得直说。放在你磁盘上的文件,会一直是你存下它那天的样子。转换器新增了一种格式、修好了一处解码,你手上那份不会跟着变。回来重新下载一次,再拿新的 SHA-256 和这里公布的对一遍。

打开它之前

确认你拿到的就是我们发布的。

一个会在你机器上跑程序的文件,值得花一分钟查一查。给下载下来的那份算个哈希,再和为这个文件公布的摘要逐字符对照。

macOS 和 Linux

shasum -a 256 private-image-converter.html

Windows

certutil -hashfile private-image-converter.html SHA256

构建这个文件的工作流,会把它的 SHA-256 记进它发布的那次版本记录里。要对照的就是那个数值,它由生成这些字节的机器记录下来,而不是事后手敲上去的。

如果对不上

别打开这个文件。对不上通常是下载中断,偶尔是更糟的事。把它删掉,重新取一次。如果第二份也对不上,请到问题追踪里提出来,不要绕过去。

验证离线这个说法

网上每一个转换工具都说自己不上传任何东西。这一个,任何人都能在自己的机器上验证,一行源代码都不用读。

  1. 01把文件存到一个平常的地方。下载文件夹就行。
  2. 02把网络彻底关掉。开飞行模式,或者拔掉网线并关掉无线。
  3. 03打开这个文件。地址栏里是一个 file:// 地址,也就是说浏览器是从你的磁盘上加载它的,不是从别的什么地方。
  4. 04转换一张照片。它能用,速度不打折,而且没有任何地方可以把它发出去。
  5. 05重新联网,开着开发者工具的网络面板再做一遍。那里始终是空的。

限制

离线文件在 Firefox 里读不了 HEIC。

一个 HEIC 是装在容器里的一帧 HEVC 视频。转换器自己读容器,再把画面交给这台机器上能解 HEVC 的东西。Safari 直接就能解 HEIC。Chrome 和 Edge 会开放你电脑视频硬件里内置的那个解码器,大多数机器都有。Firefox 两者都不提供。

要补上这个缺口,需要一个软件 HEVC 解码器,而把它写进文件里就必然要背上一个依赖。离线版故意一个依赖都不带,正是这一点让它能是一份带着可核对哈希的单一文档。所以在 Firefox 里它会拒绝 HEIC,并给出一句说明原因的话,改什么设置都不管用。

本页顶部的转换器能处理它。这个网站在确认浏览器没有别的路可走之后,会把一个软件解码器作为单独的文件加载进来,而这是单个文档做不到的。

Firefox 能做的事

其余全部。PNG、JPEG、WebP、TIFF、Photoshop、相机 RAW、OpenEXR、Radiance HDR 等等,在 Firefox 里都能用离线文件转换。HEIC 是唯一一个要靠 Firefox 所没有的解码器的格式。

为什么授权条款只有一行

这是同一个限制的另一面。这个文件是转换器包和它的界面,两者都以 MIT 授权,被编译进了一个文档,里面没有任何第三方库,所以那份 MIT 声明覆盖了整个成品。这个网站加载的软件 HEIC 解码器是 LGPL-3.0 的,把这种授权下的库熔进一个压缩过的单文档,会给每一个转手这个文件的人都加上义务。让这个构建不带依赖,换来的就是这份简短的授权条款。

细节

具体规格。

在当前版本的 Chrome、Firefox 和 Safari 上实测。这里没有一条是对未来版本的断言。

运行方式
完全在浏览器标签页里。没有任何服务器组件。
输入方式
HEIC、HEIF、PNG、APNG、JPEG、JPEG XL、WebP、AVIF、GIF、BMP、ICO、TIFF、PSD、相机 RAW、DDS、HDR、OpenEXR、PCX、ICNS、Sun raster、XBM、XPM、QOI、TGA、PNM、farbfeld、SVG。
写出
PNG、APNG、JPEG、WebP、AVIF、GIF、TIFF、BMP、ICO、ICNS、PCX、Sun raster、XBM、XPM、HDR、OpenEXR、QOI、TGA、PNM、farbfeld。Safari 无法写出 WebP;AVIF 需要 AV1 编码器。
上限
每张图片 8000 万像素,大约 10,000 乘 8,000,再往上浏览器标签页会在做完之前耗尽内存。手机可能更早停下:工具会问浏览器能不能容纳那么大的绘图表面,答案是不能时会明说。字节数没有上限,因为什么都不用上传。
HEIC 支持
Safari 直接就能读。机器上有硬件视频解码时,Chrome 和 Edge 也能读。其余情况使用这个页面按需加载的软件解码器。
色彩
逐个文件检测 Display P3,并在输出格式能承载时保留它。高动态范围会被压平成标准动态范围。
元数据
默认移除,包括位置和时间戳。要不要保留,由你每次转换自行决定。
网络
转换时没有。转换器里任何地方都没有 fetch、XMLHttpRequest、WebSocket、EventSource 或 sendBeacon。
存储
没有。没有 cookie、本地存储、会话存储、数据库或缓存。
离线
可以。单文件版在断网的情况下也能从你自己的磁盘上运行。
校验
SHA-256,与文件一并公布,构建它的那次发布记录里也再记了一遍。
依赖
运行时没有依赖。这个页面可以加载的软件 HEIC 解码器是一份独立的可选资源。
许可协议
MIT

值得一问的问题。

我的照片会被上传到什么地方吗?
不会。转换在你的浏览器里运行,文件绝不会离开你的机器。这里没有任何服务器可以接收它。最简单的自我验证办法,是把网络关掉,照样转换点什么。
这和我找到的其他转换工具有什么不同?
它们大多是一个上传表单。你的文件被送到服务器,在那里转换,之后被删掉,至少他们是这么说的。这个工具改在你自己的机器上转换,这个问题也就不存在了。
它能读取和写出哪些格式?
它能读取二十六种格式:HEIC 与 HEIF、PNG 与 APNG、JPEG、JPEG XL、WebP、AVIF、GIF、BMP、ICO、TIFF、Photoshop 的 PSD 与 PSB、多数厂商的相机 raw、DDS、Radiance HDR、OpenEXR、PCX、Apple 图标集、Sun raster、XBM、XPM、QOI、TGA、PNM 和 farbfeld,以及 SVG。其中二十种可以写出。Photoshop、DDS、相机 raw 和 SVG 只读,Safari 无法写出 WebP,AVIF 需要浏览器自带 AV1 编码器。
我该转成 PNG 还是 JPG?
要留着或者要编辑的副本,选 PNG。它是无损的,出来的就是进去的那张图,文件通常会大上好几倍。要发给别人的图,选 JPEG,它和 JPG 是同一种格式:它会再压一次,文件很小,一点细节永远回不来了。同样质量下 WebP 和 AVIF 还要更小,能打开它们的软件也更少。如果这张图要去一个你控制不了的地方,JPG 是那个永远能用的。
转换会损失画质吗?
转成 PNG 不会:它是无损的,结果就是进去的那张图。转成 JPEG、WebP 或 AVIF 会再压一次,这确实会损失一点,损失多少由质量滑块控制。
位置和日期会怎么处理?
除非你勾选保留,否则它们会被移除。每个结果都会列出被去掉了什么,让你看清原文件里带着哪些东西。这件事比听上去要紧:在家里拍的照片,里面就有你的住址。
HEIC 是什么,为什么到处都打不开它?
HEIC 是 iPhone 默认保存照片所用的格式。它用视频压缩来存储图像,文件大小大约只有同等 JPEG 的一半。这种压缩背着专利负担,所以很多浏览器和应用一直没有支持读取它。
为什么在 Firefox 里更慢?
读取 HEIC 需要一个 HEVC 解码器。Safari 自带一个,Chrome 和 Edge 会开放你机器硬件里内置的那个。Firefox 两者都不提供,所以这个页面会改为加载一个软件解码器。它给出的结果一样,只是耗时更久;凡是走了这条路的转换,工具都会标注出来。
为什么转换后的照片在别的地方有时看起来发灰?
因为 iPhone 照片用的是 Display P3,色彩范围比大多数文件用的更宽;转换工具如果把这些数值写出去,却不记下它们属于哪个范围,画面看起来就会发灰。这个工具会从文件里检测出范围,并把色彩配置文件带进结果。
HDR 照片转换后还是 HDR 吗?
转换为 AVIF 就还是。HDR 照片是一张普通图像加一张亮度映射,AVIF 会把两者都带上,描述它们关系的参数也逐字节原样复制,而不是重新算一遍。其他输出格式只能装一张图,所以你得到的是标准动态范围版本,并会看到一行说明 HDR 没有保留。
为什么 PNG 比它原来的文件还大?
PNG 是无损的,JPEG、WebP、AVIF 和 HEIC 不是。那些格式为了达到自己的体积扔掉了细节,而 PNG 什么都扔不掉,只能把剩下的完整存下来。如果体积比保真更重要,那就转成 JPEG 或 WebP。
在手机上能用吗?
能。转换在手机浏览器里跑,和在桌面上跑是一回事,你也可以直接从相册里挑照片。在 iPhone 上,保存会把结果交给系统的共享菜单,而不是丢进 Files,所以你能从那个早就熟悉的菜单把它放回 Photos,或者发进一条消息里。浏览器没有共享菜单的地方,保存就照常下载文件。
我能一次转换多张吗?
可以。想拖多少、选多少都行,它们会一张接一张地转换。之所以按顺序处理而不是一起处理,是因为一个浏览器标签页同时转换二十张照片会耗尽内存。
一批里有一个文件失败了,怎么办?
其余的照样转换完成了。失败的文件也占着它自己那一行,并写明原因,所以你能直接看出是哪一个,而不用数着行数去推断少了什么。原因通常是文件损坏或者只下载了一部分、这个浏览器写不出那种格式,或者图片超过了像素上限。把那一个弄好之后再拖进来就行,别的都不用重做一遍。
没有互联网连接也能用吗?
可以,只要页面已经加载完。本页下面还有一个单文件版本,你下载一次,就能完全不连网直接从硬盘上打开它。
单文件版本到底是什么?
一份 HTML 文档。转换器、它的界面和它的样式表全都写在里面。你像打开电脑上任何一个文件那样打开它,浏览器就从你的磁盘上把它跑起来。
我需要安装什么吗?
不需要。没有要安装的东西,没有扩展,也不用加什么运行时。这几年的浏览器已经带齐了它要用的一切。
我怎么知道下载到的文件就是对的那个?
给它算个哈希,和为它公布的 SHA-256 对一下。构建这个文件的工作流会把那个数值记进它发布的那次版本记录里,所以它来自生成这些字节的那台机器。
为什么在离线文件里,Firefox 处理 HEIC 会失败?
Firefox 不提供 HEVC 解码器,而一个 HEIC 就是一帧 HEVC。离线文件按设计不带任何依赖,所以没有软件解码器可以退回去用。本页顶部的转换器会把一个软件解码器作为单独的文件加载进来,而这是单个文档做不到的。
我怎么拿到更新的版本?
回来重新下载一次。放在你磁盘上的文件没法自己更新,这是你换取一份谁也没法在你背后动手脚的副本所付出的代价。
我能把这个文件转给别人吗?
可以。它以 MIT 许可发布,又自成一体,装在 U 盘里带走也一样好用。记得让对方核对哈希。
它用的是什么许可?
整个文件都是 MIT。里面没有编译进任何用别的许可发布的库,这是有意为之,也正是它在 Firefox 里解不了 HEIC 的原因。
为什么这个离线文件这么大?
因为它就是程序本身,而不是一个去取程序的页面。普通网页本身很小,然后再下载好几百 KB 的脚本。这个文件把那次下载一次做完,之后再也不用做。
它能转换动态 GIF 吗?
能,而且帧都会保留。GIF 转成 APNG 出来还是动画,节奏也一样;APNG 转回 GIF 同样如此。两者转成静态格式时保留第一帧,并且会说明这一点。
实况照片会怎么样?
一张实况照片其实是两个文件:静态图像,以及你按下快门前后录下的一小段视频。到这里来的是那张静态图像,你拿回去的也是它。动起来的那部分留在旁边那段视频里,这个工具不读它。它转换的是图片,不是视频。
它怎么处理相机 RAW 文件?
它取出相机在按下快门时嵌进文件里的全尺寸 JPEG,现在的相机都会附带这一张。那是相机自己的成像,而不是对 RAW 数据的冲洗,所以它不会和修图软件出来的效果一致;但它是一张全分辨率的真实照片,而且很快就能拿到。
它能做出 PDF 吗?
不能,而这是一个决定,不是还没做。PDF 是一个页面,写出一个 PDF 就得选定页面尺寸、页边距,还有图片摆在哪里,而这些选择属于做那份文档的人。转成 PNG 或 JPG,再把它放进你用来排版的东西里。
它能把东西转成 HEIC 吗?
不能,也没有这个打算。没有浏览器能写出 HEIC,而它所用的压缩带着授权义务,免费工具无从满足。

文件一直待在你的机器上。

整个转换器都是开源的,没有任何运行时依赖。你可以去读它,也可以下载单文件版本留一份。

阅读源代码