jdk/src/share/classes/com/sun/imageio/plugins/png/PNGImageWriter.java
changeset 1734 861400729115
parent 1715 349c53487e78
child 2376 63e13f6d2319
equal deleted inserted replaced
1733:95c41a86eac9 1734:861400729115
   669             cs.writeBytes(text);
   669             cs.writeBytes(text);
   670             cs.finish();
   670             cs.finish();
   671         }
   671         }
   672     }
   672     }
   673 
   673 
   674     private byte[] deflate(String s) throws IOException {
   674     private byte[] deflate(byte[] b) throws IOException {
   675         ByteArrayOutputStream baos = new ByteArrayOutputStream();
   675         ByteArrayOutputStream baos = new ByteArrayOutputStream();
   676         DeflaterOutputStream dos = new DeflaterOutputStream(baos);
   676         DeflaterOutputStream dos = new DeflaterOutputStream(baos);
   677 
   677 
   678         int len = s.length();
   678         int len = b.length;
   679         for (int i = 0; i < len; i++) {
   679         for (int i = 0; i < len; i++) {
   680             dos.write((int)s.charAt(i));
   680             dos.write((int)(0xff & b[i]));
   681         }
   681         }
   682         dos.close();
   682         dos.close();
   683 
   683 
   684         return baos.toByteArray();
   684         return baos.toByteArray();
   685     }
   685     }
   686 
   686 
   687     private void write_iTXt() throws IOException {
   687     private void write_iTXt() throws IOException {
   688         Iterator keywordIter = metadata.iTXt_keyword.iterator();
   688         Iterator<String> keywordIter = metadata.iTXt_keyword.iterator();
   689         Iterator flagIter = metadata.iTXt_compressionFlag.iterator();
   689         Iterator<Boolean> flagIter = metadata.iTXt_compressionFlag.iterator();
   690         Iterator methodIter = metadata.iTXt_compressionMethod.iterator();
   690         Iterator<Integer> methodIter = metadata.iTXt_compressionMethod.iterator();
   691         Iterator languageIter = metadata.iTXt_languageTag.iterator();
   691         Iterator<String> languageIter = metadata.iTXt_languageTag.iterator();
   692         Iterator translatedKeywordIter =
   692         Iterator<String> translatedKeywordIter =
   693             metadata.iTXt_translatedKeyword.iterator();
   693             metadata.iTXt_translatedKeyword.iterator();
   694         Iterator textIter = metadata.iTXt_text.iterator();
   694         Iterator<String> textIter = metadata.iTXt_text.iterator();
   695 
   695 
   696         while (keywordIter.hasNext()) {
   696         while (keywordIter.hasNext()) {
   697             ChunkStream cs = new ChunkStream(PNGImageReader.iTXt_TYPE, stream);
   697             ChunkStream cs = new ChunkStream(PNGImageReader.iTXt_TYPE, stream);
   698             String keyword = (String)keywordIter.next();
   698 
   699             cs.writeBytes(keyword);
   699             cs.writeBytes(keywordIter.next());
   700             cs.writeByte(0);
   700             cs.writeByte(0);
   701 
   701 
   702             int flag = ((Integer)flagIter.next()).intValue();
   702             Boolean compressed = flagIter.next();
   703             cs.writeByte(flag);
   703             cs.writeByte(compressed ? 1 : 0);
   704             int method = ((Integer)methodIter.next()).intValue();
   704 
   705             cs.writeByte(method);
   705             cs.writeByte(methodIter.next().intValue());
   706 
   706 
   707             String languageTag = (String)languageIter.next();
   707             cs.writeBytes(languageIter.next());
   708             cs.writeBytes(languageTag);
       
   709             cs.writeByte(0);
   708             cs.writeByte(0);
   710 
   709 
   711             String translatedKeyword = (String)translatedKeywordIter.next();
   710 
   712             cs.writeBytes(translatedKeyword);
   711             cs.write(translatedKeywordIter.next().getBytes("UTF8"));
   713             cs.writeByte(0);
   712             cs.writeByte(0);
   714 
   713 
   715             String text = (String)textIter.next();
   714             String text = textIter.next();
   716             if (flag == 1) {
   715             if (compressed) {
   717                 cs.write(deflate(text));
   716                 cs.write(deflate(text.getBytes("UTF8")));
   718             } else {
   717             } else {
   719                 cs.writeUTF(text);
   718                 cs.write(text.getBytes("UTF8"));
   720             }
   719             }
   721             cs.finish();
   720             cs.finish();
   722         }
   721         }
   723     }
   722     }
   724 
   723 
   735 
   734 
   736             int compressionMethod = ((Integer)methodIter.next()).intValue();
   735             int compressionMethod = ((Integer)methodIter.next()).intValue();
   737             cs.writeByte(compressionMethod);
   736             cs.writeByte(compressionMethod);
   738 
   737 
   739             String text = (String)textIter.next();
   738             String text = (String)textIter.next();
   740             cs.write(deflate(text));
   739             cs.write(deflate(text.getBytes()));
   741             cs.finish();
   740             cs.finish();
   742         }
   741         }
   743     }
   742     }
   744 
   743 
   745     private void writeUnknownChunks() throws IOException {
   744     private void writeUnknownChunks() throws IOException {