我正在尝试调整.tif图像的大小,然后通过将其转换为base64字符串将其显示在浏览器上。由于ImageIo默认不支持TIF图像,因此我添加了imageio_alpha-1.1.jar(在此处获取 - http://www.findjar.com/jar/geoserver/jai/jars/jai_imageio-1.1-alpha.jar.html)。现在ImageIO能够注册插件,我通过这个来检查
String [] writerNames = ImageIO.getWriterFormatNames();
writerNames中有TIF,这意味着ImageIO已经注册了该插件。
我正在调整像这样的图像
Map resizeImage(BufferedImage imageData, int width, int height, String imageFormat){
BufferedImage thumbnail = Scalr.resize(imageData, Scalr.Method.SPEED, Scalr.Mode.FIT_EXACT ,
width, height, Scalr.OP_ANTIALIAS);
String[] writerNames = ImageIO.getWriterFormatNames();
ByteArrayOutputStream baos = new ByteArrayOutputStream()
ImageIO.write(thumbnail, imageFormat, baos)
baos.flush()
byte[] imageBytes = baos.toByteArray()
baos.close()
return [imageBytes:imageBytes, imageFormat:imageFormat]
}
String encodeImageToBase64(byte[] imageData){
return Base64.encodeBase64String(imageData)
}
BufferedImage getBufferedImage(byte[] imageData){
ByteArrayInputStream bais = new ByteArrayInputStream(imageData)
BufferedImage bImageFromConvert = ImageIO.read(bais)
bais.close()
return bImageFromConvert
}
String resizeToDimensions(byte[] imageData, String imageFormat, int width, int height){
def bimg = getBufferedImage(imageData)
Map resizedImageData = resizeImage(bimg, width, height, imageFormat)
return encodeImageToBase64(resizedImageData.imageBytes)
}
现在我正在显示这样的图像
使用此< img src = "data:image/tif;base64,TU0AKgAAAAgADAEAAAMAAA...." />
我无法加载网址留言(悬停时)
据我所知,base64字符串通常以/ 9j /开头(可能是我错了)。当我追加/ 9j /。我收到一个错误 - “图像损坏或截断”。我无法在这里找出问题,请帮助。
答案 0 :(得分:1)
乍一看,您对Data URI format的使用看起来是正确的 - 尝试并准确缩小失败的位置。
我建议:
到目前为止应该回答大多数问题。
实际上现在考虑一下,尝试使用ImageIO将图像读入BufferedImage,然后用imgscalr处理它,然后立即调用ImageIO.write并尝试将其写入其他地方的新TIF并确保ImageIO解码/编码过程正常工作。
希望有所帮助!