首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >粉色/紫色,带Java Resizer

粉色/紫色,带Java Resizer
EN

Stack Overflow用户
提问于 2015-10-27 22:27:08
回答 1查看 243关注 0票数 1

我使用Groovy&Grails和thumbnailator来调整缩略图的大小,代码如下:

代码语言:javascript
复制
BufferedImage image = ImageIO.read(new FileInputStream("input.jpg"))
BufferedImage output = Thumbnails.of(image).size(400, 400).crop(Positions.CENTER).asBufferedImage()
ByteArrayOutputStream baos = new ByteArrayOutputStream()
ImageIO.write(output, "jpg", baos)
baos.flush()
OutputStream outputStream = new FileOutputStream("output.jpg")
baos.writeTo(outputStream)
baos.close()   

但在某些不可重现的情况下,图像将变成这样:

我已经检查了其他线程,比如下面的链接:Pink/Reddish tint while resizing jpeg images using java thumbnailator or imgscalr

我坚持认为,完全相同的文件可以工作99%,但在某些情况下,根据定义,不能。

我的问题是:如何重现这种行为?

EN

回答 1

Stack Overflow用户

发布于 2015-10-28 09:33:41

尽管预计每次输入都是相同的,但肯定会有一些东西发生变化。你能做的就是原封不动地写出输入文件和output.jpg。当你遇到这个问题时,你就可以将它的输入文件与已经工作的调整大小的输入文件进行比较。

应该有一些不同。如果有,那么问题很可能出在提供输入文件的过程中。如果没有,这将是相当令人惊讶的,那么调整大小的代码就有问题。

提示:您可以使用SHAx、MD5等来确定输入文件是否不同。

确认输入文件

要确认输入文件,可以将传入数据写入单独的文件。

代码语言:javascript
复制
def inputCopy = new FileOutputStream("input-SOMETHING-UNIQUE-HERE.jpg")
def input = new WritingInputStream(
    new FileInputStream("input.jpg"),
    inputCopy)

BufferedImage image = ImageIO.read(input)
...
inputCopy.close()

OutputStream读取数据时,WritingInputStream将数据写入InputStream。源码如下所示:

代码语言:javascript
复制
class WritingInputStream extends FilterInputStream {
    private OutputStream output

    public WritingInputStream(InputStream input, OutputStream output) {
        super(input)

        this.output = output
    }

    int read() {
        int data = super.read()

        output.write(data)

        return data
    }

    int read(byte[] b) {
        int result = super.read(b)

        output.write(b)

        return result
    }

    int read(byte[] b, int off, int len) {
        int result = super.read(b, off, len)

        output.write(b, off, len)

        return result
    }    
}

写出inputCopy文件的另一种方法是使用ByteArrayOutputStream并记录其内容的SHA1,然后可以将其与输入文件的SHA1进行比较。

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

https://stackoverflow.com/questions/33370585

复制
相关文章

相似问题

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