我尝试将图像转换为 Jpeg2000:
convert example2.png -quality 95 example.jp2
但输出的仍然是png:
file example.jp2
example.jp2: PNG image data, 2549 x 3507, 8-bit/color RGB, non-interlaced
我究竟做错了什么?
convert -version
Version: ImageMagick 6.8.9-9 Q16 x86_64 2016-11-29 http://www.imagemagick.org
答案1
我究竟做错了什么?
没什么。您输入的命令是正确的。问题是*.jp2
( JPEG 2000
) 支持未内置在Imagemagick。当转换为不受支持的格式时,生成的目标文件将与源文件格式相同。
您可以通过查看输出的第四行来验证这一点convert -version
:
$ convert -version
输出:
Version: ImageMagick 6.8.9-9 Q16 x86_64 2016-11-29 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib
请注意,jp2
不包括。
这是一个已报告的错误(imagemagick:缺少 JPEG-2000 支持):
该错误报告描述了该问题并指出它已在最新版本(版本 6.9.1.2-1)中得到修复,但尚未到达存储库。
另一项支持测试jp2
是:
$ identify -list format | egrep -i jp2
使用以下产品PPA
时,风险由您自行承担:
https://launchpad.net/~isage-dna/+archive/ubuntu/imagick
更新:
根据 SamWilson 在命令中提供的信息,我测试过的受支持的 PPA 位于:https://launchpad.net/~lyrasis/+archive/ubuntu/imagemagick-jp2
sudo add-apt-repository ppa:lyrasis/imagemagick-jp2
sudo apt-get update
答案2
尝试这个
convert example2.png -quality 0 example.jp2
答案3
截至 2021 年 2 月,这仍然是一个问题。据我所知,由于存在潜艇专利风险,Ubuntu 已禁用对 JPEG 2000 的支持。
不过,有一种解决方法不需要使用第三方 PPA 或自己编译软件。该libopenjp2-tools
软件包包含一个名为 的解码工具opj_decompress
,它能够将 .jp2 文件转换为各种无损格式,包括 PNG、BMP、TIF 和 RAW。它甚至可以在不借助外部工具的情况下转换整个目录的文件。
将单个文件转换为 TIF:
opj_decompress -i input.jp2 -o output.tif
将目录下的文件转换为 TIF:
opj_decompress -ImgDir my_jp2_images/ -OutFor TIF
不幸的是,由于本机目录转换不是多线程的,因此速度不是很快。多年来,我不得不处理大量 JPEG 2000 文件,并且我开始使用 GNU Parallel 通过使用所有可用的 CPU 线程来加速转换过程。
将目录中的所有 .jp2 文件转换为 .tif(需要 cd 到包含文件的目录):
ls *.jp2 |parallel -j 10 --nice 19 --bar --will-cite "opj_decompress -i {} -o {}.tif"
将值更改-j
为想要使用的线程数。
这些文件非常大,因为它们不使用任何类型的压缩,所以如果您需要通过网络传输它们或打算长期存储它们,您可能需要通过应用 LZW 压缩来减小它们的大小:
ls *.tif |parallel -j 10 --nice 19 --bar --will-cite "mogrify -compress lzw {}"
根据我的经验,这可以将文件大小减少多达 50%。