6 Commits

4 changed files with 47 additions and 30 deletions

View File

@ -13,12 +13,12 @@ mvn package
### run by jar
```shell
java -jar ./target/dist/lib/bioformats-imageinfo-1.1.1.jar "[path to image file]"
java -jar ./target/dist/lib/bioformats-imageinfo-1.1.2.jar "[path to image file]"
```
### run by fat jar
```shell
java -jar ./target/bioformats-imageinfo-1.1.1-jar-with-dependencies.jar "[path to image file]"
java -jar ./target/bioformats-imageinfo-1.1.2-jar-with-dependencies.jar "[path to image file]"
```
### library usage

View File

@ -1,11 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jp.riken.neurodata.tools.BioFormatsImageInfo</groupId>
<artifactId>bioformats-imageinfo</artifactId>
<version>1.1.1</version>
<version>1.1.2</version>
<name>bioformats-imageinfo</name>
<url>https://neurodata.riken.jp</url>
@ -132,6 +130,7 @@
<layout>default</layout>
</pluginRepository>
</pluginRepositories>
<repositories>
<repository>
<id>central</id>

View File

@ -256,12 +256,12 @@ public class BioFormatsImageInfo {
} else {
final String path = args[0];
try {
DebugTools.enableLogging("ERROR");
DebugTools.enableLogging("OFF");
format = readMetadata(path, metadata);
BioFormatsImageThumbnail.readThumbnail(path, thumbnail);
} catch (BioFormatsImageException e) {
} catch (Throwable t) {
status = false;
message = e.getMessage();
message = t.getMessage();
metadata.clear();
thumbnail.clear();
}

View File

@ -22,6 +22,7 @@ import javax.imageio.stream.ImageOutputStream;
import loci.common.DebugTools;
import loci.formats.FormatException;
import loci.formats.ImageReader;
import loci.formats.gui.AWTImageTools;
import loci.formats.gui.BufferedImageReader;
public class BioFormatsImageThumbnail {
@ -89,8 +90,10 @@ public class BioFormatsImageThumbnail {
final ImageOutputStream ios = ImageIO.createImageOutputStream(baos);) {
final ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();
final ImageWriteParam param = writer.getDefaultWriteParam();
if (param.canWriteCompressed()) {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality);
}
writer.setOutput(ios);
writer.write(null, new IIOImage(removeAlphaChannel(image, matColor), null, null), param);
writer.dispose();
@ -108,7 +111,10 @@ public class BioFormatsImageThumbnail {
final ImageOutputStream ios = ImageIO.createImageOutputStream(baos);) {
final ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
final ImageWriteParam param = writer.getDefaultWriteParam();
if (param.canWriteCompressed()) {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.0f);
}
writer.setOutput(ios);
writer.write(null, new IIOImage(image, null, null), param);
writer.dispose();
@ -151,6 +157,8 @@ public class BioFormatsImageThumbnail {
reader.setId(path);
} catch (FormatException | IOException e) {
throw new BioFormatsImageException("unsupported file: " + path);
} catch (Throwable t) {
throw new BioFormatsImageException(t);
}
try {
int series = 0;
@ -163,19 +171,28 @@ public class BioFormatsImageThumbnail {
}
}
reader.setSeries(series);
final int no = 0;
final int z = reader.getSizeZ() / 2; // middle of slices
final int t = reader.getSizeT() / 2; // middle of frames
final int c = 0; // first channel
final int no = reader.getIndex(z, c, t);
// System.out.println("series count: " + seriesCount);
// System.out.println("image count: " + reader.getImageCount());
// System.out.println("resolution: " + reader.getResolutionCount());
// System.out.println("thubmail series: " + series);
ret = reader.openThumbImage(no);
} catch (final Throwable e) {
for (Throwable t = e; t != null; t = t.getCause()) {
if (t instanceof OutOfMemoryError) {
final boolean is16bit = reader.getBitsPerPixel() > 8;
final boolean isGrayScale = ret.getSampleModel().getNumBands() == 1;
if (is16bit || isGrayScale) {
// perform auto scalling if 16bit or gray scale thumbnail image.
ret = AWTImageTools.autoscale(ret);
}
} catch (final Throwable t) {
for (Throwable e = t; e != null; e = e.getCause()) {
if (e instanceof OutOfMemoryError) {
throw new BioFormatsImageException("out of memory");
}
}
throw new BioFormatsImageException(e);
throw new BioFormatsImageException(t);
} finally {
try {
reader.close();
@ -226,7 +243,7 @@ public class BioFormatsImageThumbnail {
thumbnail.put("height", height);
thumbnail.put("mimeType", mimeType);
thumbnail.put("url", dataUri);
} catch (final BioFormatsImageException e) {
} catch (final Throwable t) {
// ignore
ret = false;
}
@ -234,22 +251,23 @@ public class BioFormatsImageThumbnail {
return ret;
}
public static void main(final String[] args) throws BioFormatsImageException {
public static void main(final String[] args) {
if (args.length != 1) {
System.out.println("filename argument required");
System.exit(1);
}
final String path = args[0];
try {
DebugTools.enableLogging("ERROR");
DebugTools.enableLogging("OFF");
BufferedImage image = getImageFromBioFormatsFile(path);
final String format = image.getColorModel().hasAlpha() ? "png" : "jpeg";
// image = resize(image, 160, 160);
final String dataUri = getDataUri(image, "image/" + format);
System.out.println(dataUri);
// saveFile(dataUri, "/var/tmp/thumbnail." + format);
} catch (final BioFormatsImageException e) {
System.out.println(e.getMessage());
} catch (final Throwable t) {
// t.printStackTrace();
System.out.println(t.getMessage());
System.exit(1);
}
}