有什么办法能让网页显示dng格式的照片?

有什么办法能让网页显示dng格式的照片呢?用什么语言可以实现?

喜欢这个问题 | 分享 | 新建回答

回答

喷火的尾巴

May 28, 2021
4 赞

让网页显示dng格式的照片的最好方式,就是事先将dng格式的照片转换成可以在html网页中展示的图片格式,例如jpg格式或者png格式。

至于能实现这种对dng格式进行(无损)转换的后台语言,那很多,必将常见能做这事,或者说这方面资源比较多的是,我感觉C++和python都适合。

以python为例,适合将dng格式转换成png、jpg格式的开源库不只一种选择,opencv和pillow应该是可以的,但是这里要介绍的是使用“rawpy”和“imageio”的组合使用来实现将dng格式图片转换成jpg格式或者png格式。

第一步、安装rawpy和imageio

就是用pip来安装,如果是python2,则是:

sudo pip install rawpy
sudo pip install imageio

如果是python3,就是:

sudo pip3 install rawpy
sudo pip3 install imageio

上面都是老生常谈的事情。

第二步、如何使用rawpy实现对dng格式图片的格式转换

首先给点别人的参考资源吧:

我这还找到一段把dng转换成tiff格式图片的代码:

import rawpy
import imageio
raw = rawpy.imread('xxx.dng')
rgb = raw.postprocess()
imageio.imsave('xxx.tiff', rgb)

你可以试试,因为上面这个代码是我想象的,没有进行实践过,你自己试试。

但是我感觉 rawpy + dng 这个方向是对的。



算了,你还是直接用GitHub那小哥的代码吧:

import argparse
import glob
import os
import sys
import imageio
import rawpy
parser = argparse.ArgumentParser(description='Tool for DNG to PNG conversion.')
parser.add_argument('--source', '-s', metavar='', help='Folder where DNG files are')
parser.add_argument('--destination', '-d', metavar='', help='Folder where PNG files are saved')
args = parser.parse_args()
if args.source is None:
    source = str(os.getcwd())
    print("Source path is current path " + source)
else:
    source = str(args.source)
    if not os.path.exists(source):
        sys.exit(args.source + ' path not found')
if args.destination is None:
    dest = input('Where do you want to save your PNG files? [' + source + '/PNG]: ')
    if len(dest) == 0:
        dest = source + '/PNG'
else:
    dest = str(args.destination)
if not os.path.exists(dest):
    if dest != source + '/PNG':
        b = input(dest + ' does not exists. Do you want to create it? [yes]: ')
        if len(b) != 0 and b.lower()[0] == 'n':
            sys.exit()
    os.makedirs(dest)
files = glob.glob(source + '/*.DNG')
if len(files) == 0:
    sys.exit('No DNG files found in ' + source)
count = 0
print('Elaborating...')
for i in files:
    raw = rawpy.imread(i)
    rgb = raw.postprocess()
    newpath = dest + '/' + i.split('/')[-1][:-3] + 'png'
    imageio.imwrite(newpath, rgb)
    count += 1
    print(str(int(count*100/len(files))) + '% ' + str(count) + '/' + str(len(files)) + ': ' + newpath)
print('Job finished!')

也就是安装好imageio和rawpy后,把上面的代码复制下来成为文件convert.py
以如下方式进行使用:

python3 convert.py --source 要被转换的dng格式的文件路径 --destination 转换后保存成png的文件路径



最后再推荐一个跨平台的软件包来实现对dng格式文件的转换,叫“UFRaw”,官网点击这里

各种平台都可以,这里我只以MacOS为例,如果是MacOS则可以用Homebrew来安装UFRaw:

brew install ufraw

使用方式很简单:

./dng-to-jpeg xxx.dng xxx.jpg

xxx.dng就是你想转换的dng格式,xxx.jpg就是你要生成的目标jpg文件。