cjpeg 失败“无法识别的文件输入格式 --- 也许您需要 -targa”

cjpeg 失败“无法识别的文件输入格式 --- 也许您需要 -targa”

我正在使用 14.04.1 LTS(服务器),我已经安装了以下内容:libjpeg8 libjpeg62 libjpeg-turbo8 libjpeg-progs libjpeg-turbo-progs

有问题的图像文件使用命令返回此内容file(我分成两行):

$ file image.jpg
image.jpg JPEG image data, JFIF standard 1.01, 
comment: "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 100"

当我运行时cjpeg image.jpg出现以下错误:

Unrecognized input file format --- perhaps you need -targa

按照建议,我运行 cjpeg -targa image.jpg:

Invalid or unsupported Targa file

在谷歌上搜索后,出现了大量调用 cjpeg 的各种包的源代码文件,并且有问题的错误消息部分分布在整个文件中,但没有任何内容引用我收到的相同错误。

答案1

您收到此错误仅仅是因为您尝试压缩不受支持的文件(例如 JPG 文件),从cjpeg手册页中可以看出:

图像处理压缩指定的图像文件,如果没有指定文件,则压缩标准输入,并在标准输出上生成 JPEG/JFIF 文件。当前支持的输入文件格式为:百万分之一英寸(PBMPLUS 彩色格式), 铂族金属(PBMPLUS灰度格式), 骨形态发生蛋白塔尔加, 和 放射线剂量率 (Utah Raster Toolkit 格式)。(仅当 URT 库可用时才支持 RLE。)

当我尝试压缩 JPG 文件时,也收到同样的错误:

$ cjpeg foo.jpg
Unrecognized input file format --- perhaps you need -targa

实际上这是默认的错误信息,请参见cjpeg.c

  switch (c) {
#ifdef BMP_SUPPORTED
  case 'B':
    return jinit_read_bmp(cinfo);
#endif
#ifdef GIF_SUPPORTED
  case 'G':
    return jinit_read_gif(cinfo);
#endif
#ifdef PPM_SUPPORTED
  case 'P':
    return jinit_read_ppm(cinfo);
#endif
#ifdef RLE_SUPPORTED
  case 'R':
    return jinit_read_rle(cinfo);
#endif
#ifdef TARGA_SUPPORTED
  case 0x00:
    return jinit_read_targa(cinfo);
#endif
  default:
    ERREXIT(cinfo, JERR_UNKNOWN_FORMAT);
    break;
  }

JERR_UNKNOWN_FORMAT定义在cderror.h

#ifdef TARGA_SUPPORTED
JMESSAGE(JERR_UNKNOWN_FORMAT,
     "Unrecognized input file format --- perhaps you need -targa")

来源:http://www.ijg.org/

相关内容