別小看圖檔格式!!

之前使用者上傳了一支由 Adobe Photoshop CS 所製作的 JPEG 檔, 透過 Servlet 輸出時, 結果無法正常地顯示在瀏覽器裡 (在 IE 裡會得到一個叉叉, 在 Firefox 下則會明確丟出 “… cannot be displayed, because it contains errors" 的錯誤訊息), 甚至引發了 Tomcat 上 “java.lang.IllegalStateException: getOutputStream() has already been called for this response" 的錯誤.

起初以為是程式寫法上的問題, 因為有許多人提到這個錯誤是 Tomcat 5 的問題, 經過了一番折騰之後, 問題竟是出在圖檔格式…

分析圖檔之後, 發現它的格式是 “JPEG Bitmap (JPG) YCbCrk", 跟我們一般在網路上看到的 “JPEG Bitmap (JPG) YCbCr" 不同. 從不知道 JPEG 檔還有 color space 的差別

這裡有提到 YCbCrK is a JPEG-based format that has been developed by Adobe, 不知道是不是從 Adobe 產品另存出來的 JPEG 檔都有這個問題, 那麼這個問題就有些嚴重了, 因為太多人以為只有 Photoshop 才能編修圖像 (殺雞焉用牛刀?), 我要怎麼跟使用者去解釋這些東西呢?

問題是解決了, 但我還是很納悶, 為什麼圖檔格式上的錯誤, 會引發伺服器後端的錯誤?