On Thu, Mar 8, 2012 at 6:39 PM, Kasper Føns <[email protected]> wrote:
>
>> I wouldn't count on Windows Explorer to give you the right values.
>> Rather check it against exiftool
>> (www.sno.phy.queensu.ca/~phil/exiftool/):
>> exiftool -a -g1 -u image.tiff
>>
>> Windows Explorer also likes the "XP" values (eg. EXIF_TAG_XPCOMMENT,
>> EXIF_TAG_XPAUTHOR), maybe try writing those as well?
>>
>> Damjan
>>
> Sorry for asking so many questions :( I hope it is okay.
Yes it's okay :).
> Hmm. It does not seem like the XP values work. They do not show correctly.
>
> Anyways, I tried using the code I sent you without special characters:
> byte[] bytesComment =
> ExifTagConstants.EXIF_TAG_USER_COMMENT.encodeValue(TiffFieldTypeConstants.FIELD_TYPE_ASCII,
> "KasperComment", set.byteOrder);
> byte[] bytesAuthor =
> TiffTagConstants.TIFF_TAG_ARTIST.encodeValue(TiffFieldTypeConstants.FIELD_TYPE_ASCII,
> "KasperAuthor", set.byteOrder);
>
> TiffOutputField commentField = new
> TiffOutputField(ExifTagConstants.EXIF_TAG_USER_COMMENT,
> ExifTagConstants.EXIF_TAG_USER_COMMENT.dataTypes[0], bytesComment.length,
> bytesComment);
> TiffOutputField authorField = new
> TiffOutputField(TiffTagConstants.TIFF_TAG_ARTIST,
> TiffTagConstants.TIFF_TAG_ARTIST.dataTypes[0], bytesAuthor.length,
> bytesAuthor);
> set.getOrCreateExifDirectory().add(commentField);
> set.getOrCreateRootDirectory().add(authorField);
>
> Then the exif tools shows (and so do windows explorer):
> ---- IFD0 ----
> Artist : KasperAuthor
> ---- ExifIFD ----
> User Comment : KasperComment
> ---- JFIF ----
> JFIF Version : 1.01
>
> However, trying the same, but adding an å to KasperComment and KasperAuthor
> gives the following:
> ---- IFD0 ----
> Artist : KasperAuthorå
> ---- ExifIFD ----
> User Comment : 䭡獰敲䍯浭敮瓃
> ---- JFIF ----
> JFIF Version : 1.01
>
> It seems the UserComment has been destroyed. Now it is suddenly chinese
> characters!?
> Windows explorer shows the artist but not the usercomment.
>
> Is this something to do with ExifDirectory vs RootDirectory?
No, the directory wouldn't affect the output.
Sanselan 0.97:
* doesn't null-terminate ASCII strings (eg. Artist), so you have to
allocate a byte array one element bigger and copy the encoded bytes to
it.
* uses the system locale for ASCII encoding, which is UTF-16LE on
Windows, even though TIFF requires UTF-8
So for ASCII fields instead of using encodeValue(), use
getBytes("UTF-8") and copy to a byte array with one more element (so
that the last element is null) like I showed you in the previous
email.
For UserComment what Sanselan does is autodetect the encoding: this
will work for ASCII and write ASCII, but in 0.97 it wrongly assumed
that the unicode encoding is UTF-8, whereas it's actually UTF-16 with
byte ordering depending on the file's byte ordering. So in 0.97 you
have to encode this manually yourself using a big hack:
byte[] unicodeMarker = new byte[]{ 0x55, 0x4E, 0x49, 0x43, 0x4F, 0x44,
0x45, 0x00 };
byte[] comment = "My Comment".getBytes("UTF-16LE"); // OR UTF-16BE if
the file is big-endian!
byte[] bytesComment = new byte[unicodeMarker.length + comment.length];
System.arraycopy(marker, 0, bytesComment, 0, marker.length);
System.arraycopy(comment, 0, bytesComment, marker.length, comment.length);
TiffOutputField commentField = new
TiffOutputField(ExifTagConstants.EXIF_TAG_USER_COMMENT,
ExifTagConstants.EXIF_TAG_USER_COMMENT.dataTypes[0], bytesComment.length,
bytesComment);
We can safely conclude from this that there is many reasons why 1.0
needs to be released, and 0.97 needs to die :).
>
> /Kasper
>
Damjan
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]