⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpegtran.c

📁 jpeg 压缩/解压缩库,是Intel 在ijg基础上改进的libjpeg,encode/decode是ijg的速度的2倍以上。
💻 C
📖 第 1 页 / 共 2 页
字号:
      if (lval < 0 || lval > 65535L)  usage();      if (ch == 'b' || ch == 'B') {  cinfo->restart_interval = (unsigned int) lval;  cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */      } else {  cinfo->restart_in_rows = (int) lval;  /* restart_interval will be computed during startup */      }    } else if (keymatch(arg, "rotate", 2)) {      /* Rotate 90, 180, or 270 degrees (measured clockwise). */      if (++argn >= argc) /* advance to next argument */  usage();      if (keymatch(argv[argn], "90", 2))  select_transform(JXFORM_ROT_90);      else if (keymatch(argv[argn], "180", 3))  select_transform(JXFORM_ROT_180);      else if (keymatch(argv[argn], "270", 3))  select_transform(JXFORM_ROT_270);      else  usage();    } else if (keymatch(arg, "scans", 1)) {      /* Set scan script. */#ifdef C_MULTISCAN_FILES_SUPPORTED      if (++argn >= argc) /* advance to next argument */  usage();      scansarg = argv[argn];      /* We must postpone reading the file in case -progressive appears. */#else      fprintf(stderr, "%s: sorry, multi-scan output was not compiled\n",        progname);      exit(EXIT_FAILURE);#endif    } else if (keymatch(arg, "transpose", 1)) {      /* Transpose (across UL-to-LR axis). */      select_transform(JXFORM_TRANSPOSE);    } else if (keymatch(arg, "transverse", 6)) {      /* Transverse transpose (across UR-to-LL axis). */      select_transform(JXFORM_TRANSVERSE);    } else if (keymatch(arg, "trim", 3)) {      /* Trim off any partial edge MCUs that the transform can't handle. */      transformoption.trim = TRUE;    } else {      usage();      /* bogus switch */    }  }  /* Post-switch-scanning cleanup */  if (for_real) {#ifdef C_PROGRESSIVE_SUPPORTED    if (simple_progressive) /* process -progressive; -scans can override */      jpeg_simple_progression(cinfo);#endif#ifdef C_MULTISCAN_FILES_SUPPORTED    if (scansarg != NULL) /* process -scans if it was present */      if (! read_scan_script(cinfo, scansarg))  usage();#endif  }  return argn;      /* return index of next arg (file name) */}/* * The main program. */intmain (int argc, char **argv){  struct jpeg_decompress_struct srcinfo;  struct jpeg_compress_struct dstinfo;  struct jpeg_error_mgr jsrcerr, jdsterr;#ifdef PROGRESS_REPORT  struct cdjpeg_progress_mgr progress;#endif  jvirt_barray_ptr * src_coef_arrays;  jvirt_barray_ptr * dst_coef_arrays;  int file_index;  FILE * input_file;  FILE * output_file;  if(ippStsNoErr > ippStaticInit())  {    fprintf(stderr,"Can't initialize IPP library\n");    exit(EXIT_FAILURE);  }  /* On Mac, fetch a command line. */#ifdef USE_CCOMMAND  argc = ccommand(&argv);#endif  progname = argv[0];  if (progname == NULL || progname[0] == 0)    progname = "jpegtran";  /* in case C library doesn't provide it */  /* Initialize the JPEG decompression object with default error handling. */  srcinfo.err = jpeg_std_error(&jsrcerr);  jpeg_create_decompress(&srcinfo);  /* Initialize the JPEG compression object with default error handling. */  dstinfo.err = jpeg_std_error(&jdsterr);  jpeg_create_compress(&dstinfo);  /* Now safe to enable signal catcher.   * Note: we assume only the decompression object will have virtual arrays.   */#ifdef NEED_SIGNAL_CATCHER  enable_signal_catcher((j_common_ptr) &srcinfo);#endif  /* Scan command line to find file names.   * It is convenient to use just one switch-parsing routine, but the switch   * values read here are mostly ignored; we will rescan the switches after   * opening the input file.  Also note that most of the switches affect the   * destination JPEG object, so we parse into that and then copy over what   * needs to affects the source too.   */  file_index = parse_switches(&dstinfo, argc, argv, 0, FALSE);  jsrcerr.trace_level = jdsterr.trace_level;  srcinfo.mem->max_memory_to_use = dstinfo.mem->max_memory_to_use;#ifdef TWO_FILE_COMMANDLINE  /* Must have either -outfile switch or explicit output file name */  if (outfilename == NULL) {    if (file_index != argc-2) {      fprintf(stderr, "%s: must name one input and one output file\n",        progname);      usage();    }    outfilename = argv[file_index+1];  } else {    if (file_index != argc-1) {      fprintf(stderr, "%s: must name one input and one output file\n",        progname);      usage();    }  }#else  /* Unix style: expect zero or one file name */  if (file_index < argc-1) {    fprintf(stderr, "%s: only one input file\n", progname);    usage();  }#endif /* TWO_FILE_COMMANDLINE */  /* Open the input file. */  if (file_index < argc) {    if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) {      fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]);      exit(EXIT_FAILURE);    }  } else {    /* default input file is stdin */    input_file = read_stdin();  }  /* Open the output file. */  if (outfilename != NULL) {    if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) {      fprintf(stderr, "%s: can't open %s\n", progname, outfilename);      exit(EXIT_FAILURE);    }  } else {    /* default output file is stdout */    output_file = write_stdout();  }#ifdef PROGRESS_REPORT  start_progress_monitor((j_common_ptr) &dstinfo, &progress);#endif  /* Specify data source for decompression */  jpeg_stdio_src(&srcinfo, input_file);  /* Enable saving of extra markers that we want to copy */  jcopy_markers_setup(&srcinfo, copyoption);  /* Read file header */  (void) jpeg_read_header(&srcinfo, TRUE);  /* Any space needed by a transform option must be requested before   * jpeg_read_coefficients so that memory allocation will be done right.   */#if TRANSFORMS_SUPPORTED  jtransform_request_workspace(&srcinfo, &transformoption);#endif  /* Read source file as DCT coefficients */  src_coef_arrays = jpeg_read_coefficients(&srcinfo);  /* Initialize destination compression parameters from source values */  jpeg_copy_critical_parameters(&srcinfo, &dstinfo);  /* Adjust destination parameters if required by transform options;   * also find out which set of coefficient arrays will hold the output.   */#if TRANSFORMS_SUPPORTED  dst_coef_arrays = jtransform_adjust_parameters(&srcinfo, &dstinfo,             src_coef_arrays,             &transformoption);#else  dst_coef_arrays = src_coef_arrays;#endif  /* Adjust default compression parameters by re-parsing the options */  file_index = parse_switches(&dstinfo, argc, argv, 0, TRUE);  /* Specify data destination for compression */  jpeg_stdio_dest(&dstinfo, output_file);  /* Start compressor (note no image data is actually written here) */  jpeg_write_coefficients(&dstinfo, dst_coef_arrays);  /* Copy to the output file any extra markers that we want to preserve */  jcopy_markers_execute(&srcinfo, &dstinfo, copyoption);  /* Execute image transformation, if any */#if TRANSFORMS_SUPPORTED  jtransform_execute_transformation(&srcinfo, &dstinfo,            src_coef_arrays,            &transformoption);#endif  /* Finish compression and release memory */  jpeg_finish_compress(&dstinfo);  jpeg_destroy_compress(&dstinfo);  (void) jpeg_finish_decompress(&srcinfo);  jpeg_destroy_decompress(&srcinfo);  /* Close files, if we opened them */  if (input_file != stdin)    fclose(input_file);  if (output_file != stdout)    fclose(output_file);#ifdef PROGRESS_REPORT  end_progress_monitor((j_common_ptr) &dstinfo);#endif  /* All done. */  exit(jsrcerr.num_warnings + jdsterr.num_warnings ?EXIT_WARNING:EXIT_SUCCESS);  return 0;     /* suppress no-return-value warnings */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -