Java JasperReports-显示tiff';s存储在数据库中的BLOB中
我想显示一些存储在oracle数据库BLOB中的tiff。我只是尝试使用im4java将它们从tiff转换为jpg或png,但没有成功。也许有可能在Jasper中显示.tiff和其他img数据类型而不进行转换?!或者,如果没有,是否有人有一个详细的解决方案如何转换它们?(我需要配置哪个映像类,如何在scriptlet中实现等) 谢谢大家Java JasperReports-显示tiff';s存储在数据库中的BLOB中,java,jasper-reports,jpeg,tiff,image-conversion,Java,Jasper Reports,Jpeg,Tiff,Image Conversion,我想显示一些存储在oracle数据库BLOB中的tiff。我只是尝试使用im4java将它们从tiff转换为jpg或png,但没有成功。也许有可能在Jasper中显示.tiff和其他img数据类型而不进行转换?!或者,如果没有,是否有人有一个详细的解决方案如何转换它们?(我需要配置哪个映像类,如何在scriptlet中实现等) 谢谢大家 IMOperation op = new IMOperation(); op.addImage(); op.addImage
IMOperation op = new IMOperation();
op.addImage();
op.addImage();
ConvertCmd convert = new ConvertCmd();
convert.run(op, new Object[]{inputImage.getAbsolutePath(), outputImage.getAbsolutePath()});
return outputImage;`
解决了这个问题,下面是我使用jai-imageIO.jar将tiff转换为jpg的代码: 导入java.awt.image.buffereImage; 导入java.io.ByteArrayInputStream; 导入java.io.ByteArrayOutputStream; 导入java.io.IOException; 导入java.io.InputStream 导入javax.imageio.imageio; 导入javax.imageio.spi.iiOreRegistry 导入net.sf.jasperreports.engine.jractScriptlet; 导入net.sf.jasperreports.engine.JRScriptleException
它以什么方式不起作用?转换失败了吗?是否无法显示已转换的文件?您是否收到任何异常或错误消息?@haraldK
net.sf.jasperreports.engine.JRException:无法添加单元格。在com.jaspersoft.studio.editor.preview.actions.export.AExportA上行动$3.运行(AExportA)org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)上的action.java:188),原因是:net.sf.jasperreports.engine.jr异常:图像读取失败。
这是错误消息的一部分,因此我认为转换失败。我不知道如何在scriptlet中准确地实现代码,因此转换在每个细节段之前执行。。另一个问题是,不是所有的图像都是tiff,还有jpg和一些更老的img类型。。
public static InputStream convertTifToPng(InputStream inputImage)
throws IOException, InterruptedException {
IIORegistry registry = IIORegistry.getDefaultInstance();
registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriterSpi());
registry.registerServiceProvider(new com.sun.media.imageioimpl.plugins.tiff.TIFFImageReaderSpi());
BufferedImage image;
if (inputImage != null) {
image = ImageIO.read(inputImage);
} else {
return null;
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
InputStream outputImage = new ByteArrayInputStream(baos.toByteArray());
return outputImage;
}