7070import loci .formats .MetadataTools ;
7171import loci .formats .MinMaxCalculator ;
7272import loci .formats .MissingLibraryException ;
73+ import loci .formats .codec .CodecOptions ;
74+ import loci .formats .codec .JPEG2000CodecOptions ;
7375import loci .formats .gui .Index16ColorModel ;
7476import loci .formats .in .DynamicMetadataOptions ;
7577import loci .formats .meta .IMetadata ;
@@ -133,6 +135,8 @@ public final class ImageConverter {
133135 private boolean precompressed = false ;
134136 private boolean tryPrecompressed = false ;
135137
138+ private Double compressionQuality = null ;
139+
136140 private String extraMetadata = null ;
137141
138142 private IFormatReader reader ;
@@ -273,6 +277,9 @@ else if (args[i].equals("-fill")) {
273277 else if (args [i ].equals ("-extra-metadata" )) {
274278 extraMetadata = args [++i ];
275279 }
280+ else if (args [i ].equals ("-quality" )) {
281+ compressionQuality = DataTools .parseDouble (args [++i ]);
282+ }
276283 else if (!args [i ].equals (CommandLineTools .NO_UPGRADE_CHECK )) {
277284 LOGGER .error ("Found unknown command flag: {}; exiting." , args [i ]);
278285 return false ;
@@ -349,7 +356,7 @@ private void printUsage() {
349356 " [-option key value] [-novalid] [-validate] [-tilex tileSizeX]" ,
350357 " [-tiley tileSizeY] [-pyramid-scale scale]" ,
351358 " [-swap dimensionsOrderString] [-fill color]" ,
352- " [-precompressed]" ,
359+ " [-precompressed] [-quality compressionQuality] " ,
353360 " [-pyramid-resolutions numResolutionLevels] in_file out_file" ,
354361 "" ,
355362 " -version: print the library version and exit" ,
@@ -398,6 +405,7 @@ private void printUsage() {
398405 " Most input and output formats do not support this option." ,
399406 " Do not use -crop, -fill, or -autoscale, or pyramid generation options" ,
400407 " with this option." ,
408+ " -quality: double quality value for JPEG compression (0-1)" ,
401409 "" ,
402410 "The extension of the output file specifies the file format to use" ,
403411 "for the conversion. The list of available formats and extensions is:" ,
@@ -774,6 +782,7 @@ else if (saveTileWidth > 0 && saveTileHeight > 0) {
774782 if (!ok ) {
775783 return false ;
776784 }
785+ setCodecOptions (writer );
777786 writer .setId (outputName );
778787 if (compression != null ) writer .setCompression (compression );
779788 }
@@ -793,6 +802,7 @@ else if (saveTileWidth > 0 && saveTileHeight > 0) {
793802 if (!ok ) {
794803 return false ;
795804 }
805+ setCodecOptions (writer );
796806 writer .setId (tileName );
797807 if (compression != null ) writer .setCompression (compression );
798808 }
@@ -995,6 +1005,7 @@ private long convertTilePlane(IFormatWriter writer, int index, int outputIndex,
9951005 writer .setMetadataRetrieve (retrieve );
9961006
9971007 overwriteCheck (tileName , true );
1008+ setCodecOptions (writer );
9981009 writer .setId (tileName );
9991010 if (compression != null ) writer .setCompression (compression );
10001011
@@ -1267,6 +1278,14 @@ private boolean overwriteCheck(String path, boolean throwOnExist) throws IOExcep
12671278 return true ;
12681279 }
12691280
1281+ private void setCodecOptions (IFormatWriter writer ) {
1282+ if (compressionQuality != null ) {
1283+ CodecOptions codecOptions = JPEG2000CodecOptions .getDefaultOptions ();
1284+ codecOptions .quality = compressionQuality ;
1285+ writer .setCodecOptions (codecOptions );
1286+ }
1287+ }
1288+
12701289 // -- Main method --
12711290
12721291 public static void main (String [] args ) throws FormatException , IOException {
0 commit comments