首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用imgscalr调整.tif图像的大小

使用imgscalr调整.tif图像的大小
EN

Stack Overflow用户
提问于 2012-12-27 17:11:04
回答 1查看 1.6K关注 0票数 3

因为ImageIo在默认情况下不支持TIF图像,所以我添加了imageio 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已经注册了插件。

我像这样调整图像的大小

代码语言:javascript
复制
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/开头(可能我错了),所以我无法加载url消息(悬停时)。当我附加/9j/时。我得到一个错误-“图像损坏或截断”。我想不出这里有什么问题,请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-28 02:12:07

乍一看,您对Data URI format的使用看起来是正确的--试着精确地缩小故障的范围。

我会推荐:

  1. 在您将字符串返回到前端的方法中,我建议将整个内容打印到控制台,以获得数据URI格式的原始数据。
  2. 获取数据URI字符串,创建一个包含硬编码值的示例HTML文件,尝试并加载它...是否显示图像?如果是这样的话,很好,那么你的问题就是如何将其传输回前端,或者如何尝试加载它。(可能是JavaScript/DOM问题)
  3. 如果这不起作用,试着把示例中的Base64部分切掉,并将其保存到示例TXT文件中。在您的Java代码中,加载它,解码它,并尝试创建一个图像,然后将它写回TIFF --如果这不起作用,那么说明您的Base64处理有问题,编码很可能无效。

走到这一步应该可以回答大多数问题。

实际上,现在我想了想,尝试使用ImageIO将图像读取到BufferedImage中,然后使用imgscalr处理它,然后立即调用ImageIO.write并尝试将其写出到其他地方的新TIF中,并确保ImageIO解码/编码过程正常工作。

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14052111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档