| package org.apache.commons.imaging.formats.tiff.taginfos; |
| |
| import java.io.UnsupportedEncodingException; |
| |
| import org.apache.commons.imaging.ImageWriteException; |
| import org.apache.commons.imaging.formats.tiff.constants.TiffDirectoryType; |
| |
| public class TagInfoAscii extends TagInfo { |
| public TagInfoAscii(String name, int tag, int length, TiffDirectoryType directoryType) { |
| super(name, tag, FIELD_TYPE_ASCII, length, directoryType); |
| } |
| |
| public String[] getValue(int byteOrder, byte[] bytes) { |
| int nullCount = 1; |
| for (int i = 0; i < bytes.length - 1; i++) { |
| if (bytes[i] == 0) { |
| nullCount++; |
| } |
| } |
| String[] strings = new String[nullCount + 1]; |
| int stringsAdded = 0; |
| strings[0] = ""; // if we have a 0 length string |
| int nextStringPos = 0; |
| // According to the Exiftool FAQ, http://www.metadataworkinggroup.org |
| // specifies that the TIFF ASCII fields are actually UTF-8. |
| // Exiftool however allows you to configure the charset used. |
| for (int i = 0; i < bytes.length; i++) { |
| if (bytes[i] == 0) { |
| try { |
| String string = new String(bytes, nextStringPos, i - nextStringPos, "UTF-8"); |
| strings[stringsAdded++] = string; |
| } catch (UnsupportedEncodingException unsupportedEncoding) { |
| } |
| nextStringPos = i + 1; |
| } |
| } |
| if (nextStringPos < bytes.length) { |
| // Buggy file, string wasn't null terminated |
| try { |
| String string = new String(bytes, nextStringPos, bytes.length - nextStringPos, "UTF-8"); |
| strings[stringsAdded++] = string; |
| } catch (UnsupportedEncodingException unsupportedEncoding) { |
| } |
| } |
| return strings; |
| } |
| |
| public byte[] encodeValue(int byteOrder, String... values) throws ImageWriteException { |
| return FIELD_TYPE_ASCII.writeData(values, byteOrder); |
| } |
| } |