Skip to content

Commit 2a1c8b8

Browse files
authored
Merge pull request #4171 from melissalinkert/bfconvert-quality
Add `-quality` option to bfconvert
2 parents edf5418 + f7de051 commit 2a1c8b8

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

components/bio-formats-tools/src/loci/formats/tools/ImageConverter.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@
7070
import loci.formats.MetadataTools;
7171
import loci.formats.MinMaxCalculator;
7272
import loci.formats.MissingLibraryException;
73+
import loci.formats.codec.CodecOptions;
74+
import loci.formats.codec.JPEG2000CodecOptions;
7375
import loci.formats.gui.Index16ColorModel;
7476
import loci.formats.in.DynamicMetadataOptions;
7577
import 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 {

components/formats-bsd/src/loci/formats/out/DicomWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ else if (x % thisTileWidth != 0 || y % thisTileHeight != 0 ||
532532
}
533533
else {
534534
Codec codec = getCodec();
535-
CodecOptions options = new CodecOptions();
535+
CodecOptions options = new CodecOptions(getCodecOptions());
536536
options.width = tileWidth[resolutionIndex];
537537
options.height = tileHeight[resolutionIndex];
538538
options.channels = getSamplesPerPixel();

0 commit comments

Comments
 (0)