1 package ch.ige.edossier.util;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.IOException;
5 import java.util.HashMap;
6 import java.util.Map;
7 import org.apache.log4j.Logger;
8 import com.sun.image.codec.jpeg.JPEGCodec;
9 import com.sun.image.codec.jpeg.JPEGDecodeParam;
10 import com.sun.image.codec.jpeg.JPEGImageDecoder;
11 import com.sun.media.jai.codec.MemoryCacheSeekableStream;
12
13
23 public class JPEGImageWriter extends ImageWriter
24 {
25 private static final Logger LOG = Logger.getLogger( JPEGImageWriter.class );
27
28
31 public JPEGImageWriter()
32 {}
33
34
40 public Map processImage( String outputPath, byte[] image ) throws IOException
41 {
42 processJPEGImage( image, outputPath );
43 Map dimensions = new HashMap();
44 dimensions.put( "width", String.valueOf( this.imageWidthInPixel ) );
45 dimensions.put( "height", String.valueOf( this.imageHeigthInPixel ) );
46 return dimensions;
47 }
48
49
55 private void processJPEGImage( byte[] image, String path ) throws IOException
56 {
57 extractSizeDensityJpeg( new MemoryCacheSeekableStream( new ByteArrayInputStream( image ) ) );
58 writeToFile( image, path );
59 callServlet( path, "jpg" );
60 }
61
62
67 private void extractSizeDensityJpeg( MemoryCacheSeekableStream memorySeekableStream ) throws IOException
68 {
69 JPEGImageDecoder jpgDecoder = JPEGCodec.createJPEGDecoder( memorySeekableStream );
70 jpgDecoder.decodeAsBufferedImage();
71 JPEGDecodeParam jpgParam = jpgDecoder.getJPEGDecodeParam();
72 this.imageHeigthInPixel = jpgParam.getHeight();
73 this.imageWidthInPixel = jpgParam.getWidth();
74 try
75 {
76 if( jpgParam.getDensityUnit() == jpgParam.DENSITY_UNIT_DOTS_CM )
77 {
78 this.xDensity = ( int ) ( jpgParam.getXDensity() * this.CONVERSION_DPCM_TO_DPI );
79 this.yDensity = ( int ) ( jpgParam.getYDensity() * this.CONVERSION_DPCM_TO_DPI );
80 }
81 else
82 {
83 this.xDensity = jpgParam.getXDensity();
84 this.yDensity = jpgParam.getYDensity();
85 }
86 }
87 catch( Exception ex )
88 {
89 this.xDensity = 300;
90 this.yDensity = 300;
91 LOG.warn( "Auflösungsdaten des JPEG können nicht gelesen werden: " + ex.getMessage() );
92 }
93 }
94
95 }
96