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 |