[英]java.awt.Frame.setBackground(Color arg0) not displaying PINK color
[英]Pink/Purple Color with Java Resizer
我正在使用Groovy&Grails和thumbnailator通过以下代码行调整缩略图的大小:
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()
使用input.jpg可以在99%的所有情况下(相同的Java,OS,源代码)工作。 但是在某些不可复制的情况下,图像将变为:
我检查了其他线程,例如以下链接: 使用Java thumbnailator或imgscalr调整jpeg图像大小时的粉红色/偏红色调
我坚持完全相同的文件可以工作99%的情况,但是在某些情况下(可以定义的情况)却不能。
我的问题:如何复制这种行为?
尽管每次输入都期望相同,但是必须有所变化。 您可以做的是不变地将输入文件和output.jpg
一起写出。 遇到问题时,您可以将其输入文件与有效的调整大小的输入文件进行比较。
应该有一些区别。 如果存在,则可能是在提供输入文件的过程中出现了问题。 如果没有,这将非常令人惊讶,那么调整大小的代码就会出问题。
提示:您可以使用SHAx,MD5等来确定输入文件是否不同。
要确认输入文件,可以将传入数据写入单独的文件。
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()
从InputStream
读取时, WritingInputStream
将数据写入到OutputStream
中。 源代码如下所示:
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进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.