[英]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.