KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > openedit > archive > WatermarkMaker


1 /*
2  * Created on Jan 25, 2006
3  */

4 package com.openedit.archive;
5
6 import java.awt.Graphics2D JavaDoc;
7 import java.awt.image.BufferedImage JavaDoc;
8 import java.io.ByteArrayInputStream JavaDoc;
9 import java.io.File JavaDoc;
10 import java.io.FileInputStream JavaDoc;
11 import java.io.FileNotFoundException JavaDoc;
12 import java.io.FileOutputStream JavaDoc;
13 import java.io.FilenameFilter JavaDoc;
14 import java.io.IOException JavaDoc;
15 import java.io.InputStream JavaDoc;
16 import java.io.OutputStream JavaDoc;
17 import java.util.zip.ZipEntry JavaDoc;
18 import java.util.zip.ZipInputStream JavaDoc;
19 import java.util.zip.ZipOutputStream JavaDoc;
20
21 import javax.imageio.ImageIO JavaDoc;
22
23 import com.openedit.OpenEditException;
24 import com.openedit.util.FileUtils;
25 import com.openedit.util.OutputFiller;
26
27 /**
28  * This assume JPG.
29  * @author cburkey
30  *
31  */

32 public class WatermarkMaker
33 {
34     protected File JavaDoc fieldWaterMark;
35     protected BufferedImage JavaDoc fieldBufferedWatermark;
36     
37     public void addWaterMark(InputStream JavaDoc in, OutputStream JavaDoc out) throws IOException JavaDoc
38     {
39         
40         BufferedImage JavaDoc original = ImageIO.read(in);//new File("original.png"));
41
FileUtils.safeClose(in);
42         BufferedImage JavaDoc result = new BufferedImage JavaDoc(original.getWidth(),
43                                                  original.getHeight(),
44                                                  BufferedImage.TYPE_INT_RGB);
45          
46         Graphics2D JavaDoc g = result.createGraphics();
47         g.drawImage(original, 0, 0, null);
48         g.drawImage(getBufferedWatermark(), 0, 0, null);
49          
50         ImageIO.write(result, "jpg", out);
51         out.flush();
52     }
53
54
55     public File JavaDoc getWaterMark()
56     {
57         return fieldWaterMark;
58     }
59
60
61     public void setWaterMark(File JavaDoc inWaterMark)
62     {
63         fieldWaterMark = inWaterMark;
64         setBufferedWatermark(null);
65     }
66
67
68     protected BufferedImage JavaDoc getBufferedWatermark() throws IOException JavaDoc
69     {
70         if ( fieldBufferedWatermark == null)
71         {
72             fieldBufferedWatermark = ImageIO.read(getWaterMark());
73         }
74         return fieldBufferedWatermark;
75     }
76
77
78     protected void setBufferedWatermark(BufferedImage JavaDoc inBufferedWatermark)
79     {
80         fieldBufferedWatermark = inBufferedWatermark;
81     }
82
83
84     public void addWaterMarkToZip(InputStream JavaDoc inStream, OutputStream JavaDoc inToBrowser) throws Exception JavaDoc
85     {
86         //unzip file into tmp dir. Pass each image into watermark. Zip it back up. Feed it out
87
File JavaDoc tmpDir = unzipToTmp(inStream);
88         applyWaterMark(tmpDir);
89         
90         ZipOutputStream JavaDoc finalZip = new ZipOutputStream JavaDoc(inToBrowser);
91         addToZip(tmpDir,finalZip);
92         finalZip.close();
93         
94         
95     }
96
97
98     private void addToZip(File JavaDoc inTmpDir, ZipOutputStream JavaDoc inFinalZip) throws Exception JavaDoc
99     {
100         if( inTmpDir.isDirectory())
101         {
102             File JavaDoc[] files = inTmpDir.listFiles();
103             for (int i = 0; i < files.length; i++)
104             {
105                 addToZip(files[i],inFinalZip);
106             }
107         }
108         else
109         {
110             ZipEntry JavaDoc entry = new ZipEntry JavaDoc( inTmpDir.getName() );
111             entry.setSize( inTmpDir.length() );
112             entry.setTime( inTmpDir.lastModified() );
113             FileInputStream JavaDoc fis = new FileInputStream JavaDoc( inTmpDir );
114             inFinalZip.putNextEntry( entry );
115             try
116             {
117                 new OutputFiller().fill( fis, inFinalZip );
118             }
119             finally
120             {
121                 fis.close();
122             }
123             inFinalZip.closeEntry();
124         }
125     }
126
127
128     private void applyWaterMark(File JavaDoc inTmpDir) throws IOException JavaDoc
129     {
130         if ( inTmpDir.isDirectory())
131         {
132             File JavaDoc[] files = inTmpDir.listFiles(new FilenameFilter JavaDoc()
133                 {
134                 public boolean accept(File JavaDoc dir, String JavaDoc name) { if ( name.toLowerCase().endsWith(".jpg")) return true; return false;};
135                 });
136             if ( files != null)
137             {
138                 for (int i = 0; i < files.length; i++)
139                 {
140                     applyWaterMark(files[i]);
141                 }
142             }
143         }
144         else if( inTmpDir.getName().toLowerCase().endsWith(".jpg"))
145         {
146             FileInputStream JavaDoc jpg = new FileInputStream JavaDoc(inTmpDir);
147             File JavaDoc junk = File.createTempFile("jpg","tmp");
148             FileOutputStream JavaDoc out = new FileOutputStream JavaDoc(junk);
149             addWaterMark(jpg,out);
150             FileUtils.safeClose(jpg);
151             FileUtils.safeClose(out);
152             inTmpDir.delete();
153             new OutputFiller().fill(junk,inTmpDir);
154             junk.delete();
155         }
156     }
157
158
159     private File JavaDoc unzipToTmp(InputStream JavaDoc inStream) throws IOException JavaDoc, FileNotFoundException JavaDoc
160     {
161         ZipInputStream JavaDoc unzip = new ZipInputStream JavaDoc(inStream);
162         ZipEntry JavaDoc entry = unzip.getNextEntry();
163         byte[] buf = new byte[1024];
164         File JavaDoc tmpDir = File.createTempFile("archive","zip");
165         tmpDir.delete();
166         tmpDir.mkdirs();
167         
168         while( entry != null)
169         {
170             //int zipeSize = (int) entry.getSize();
171
if ( !entry.isDirectory() )
172             {
173                 File JavaDoc ufile = new File JavaDoc( tmpDir, entry.getName());
174                 FileOutputStream JavaDoc tout = new FileOutputStream JavaDoc(ufile);
175                 int len;
176                 while ( (len = unzip.read(buf)) > 0) {
177                     tout.write(buf, 0, len);
178                 }
179             }
180             entry = unzip.getNextEntry();
181         }
182         return tmpDir;
183     }
184 }
Popular Tags