2011-04-07 105 views
2

我有一個servlet轉換和緩存較小版本的照片。它使用java.awt.image + javax.imageio和第三方重採樣過濾器實現。原件均以sRGB顏色配置文件上傳。當我重新取樣它們,並將它們保存一次,他們仍然是的sRGB然而,這並不記錄在保存的文件。保存色彩空間的JPEG

我怎樣才能確保這些信息保存在文件中?

如果你想知道它的確與衆不同,沒有輪廓的圖像更加飽和我的屏幕(Safari瀏覽器+ OSX +校準屏幕),那麼當他們有正確的sRGB模式上。另外我確定這是缺少的配置文件信息,而不是重採樣算法。

回答

0

原來就足夠了包括EXIF標籤的ColorSpace = 1,告訴它應該爲sRGB進行處理。使用Apache Commons Sanselan成功完成此操作。這個庫不幸的是不完整的,因此只能用在文件被創建後修改EXIF。

相關代碼,基於Sanselan例如:

public void addExifMetadata(File jpegImageFile, File dst) 
      throws IOException, ImageReadException, ImageWriteException { 
     OutputStream os = null; 
     try { 
      TiffOutputSet outputSet = new TiffOutputSet(); 

      TiffOutputField colorspace = TiffOutputField.create(
         TiffConstants.EXIF_TAG_COLOR_SPACE, outputSet.byteOrder, new Integer(1)); 
      TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory(); 
      exifDirectory.add(colorspace); 

      os = new FileOutputStream(dst); 
      os = new BufferedOutputStream(os); 
      new ExifRewriter().updateExifMetadataLossless(jpegImageFile, os, outputSet); 

      os.close(); 
      os = null; 
     } finally { 
      if (os != null) 
       try { 
        os.close(); 
       } catch (IOException e) { 

       } 
     } 
    }