在我的 Linux 系统 (Debian) 上,我可以解码 JPEG,然后将其重新编码为 TIFF使用:
% ffmpeg -i input.jpeg -pix_fmt rgba output.tiff
或者甚至使用 libtiff-tools:
% convert -size 256x256 -depth 8 xc:white white.ppm
% ppm2tiff white.ppm white.tiff
% tiffcp -c jpeg white.tiff white.jpg.tiff
tiffcp
JPEG 压缩(有损过程)在操作期间在内部完成。
但我想做无损的从 JPEG 混合到 TIFF 容器/格式(反之亦然:从输入 TIFF/JPEG 文件中提取 JPEG 比特流)。我可以使用 ffmpeg 或其他 UNIX 命令行工具来做到这一点吗?例如我可以将 JPEG 混合到 M-JPEG无损地:
% ffmpeg -framerate 30 -i input%03d.jpg -codec copy output.mjpeg
作为参考,这里是一个典型的 TIFF/JPEG,如何从中提取原始 JPEG 双流?
% tiffinfo white.jpg.tiff
TIFF Directory at offset 0x430 (1072)
Image Width: 256 Image Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: YCbCr
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Rows/Strip: 256
Planar Configuration: single image plane
Reference Black/White:
0: 0 255
1: 128 255
2: 128 255
JPEG Tables: (574 bytes)
答案1
从 TIFF 中提取 JPEG 的一种可能方法如下:
$ tiff2pdf -o white.jpg.tiff.pdf white.jpg.tiff
$ pdfimages -all white.jpg.tiff.pdf root
$ file root-000.jpg
root-000.jpg: JPEG image data
由于 tiff2pdf 手册页指出:
如果输入的 TIFF 包含 JPEG 或单条 Zip/Deflate 压缩信息,并且配置了它们,则将不转码写入 PDF 文件,除非设置了不压缩和不直通选项。
相反的操作比我最初想象的稍微复杂一些,因为 TIFF 不仅仅是 JPEG 比特流的“信封”,因为霍夫曼表已经移动了: