dragon66 / icafe

Java library for reading, writing, converting and manipulating images and metadata
Eclipse Public License 1.0
204 stars 58 forks source link

'B' char appears before unicode special symbols e. q. © symbol #42

Closed sinedsem closed 7 years ago

sinedsem commented 7 years ago

This issue appears not always. Basically, it depends on image file. Some files are ok, others procudes this issue. Example of a problem file: https://github.com/sinedsem/test/blob/master/6.jpg

ArrayList<IPTCDataSet> iptcDataSets = new ArrayList<>();
iptcDataSets.add(new IPTCDataSet(IPTCApplicationTag.OBJECT_NAME, "I have ©"));
FileInputStream is = new FileInputStream("6.jpg");
FileOutputStream os = new FileOutputStream("result.jpg");
Metadata.insertIPTC(is, os, iptcDataSets, true);
is.close();
os.close();

Result: I have В©.

P. S. I really wish to prodive you more information when opening issues, but debugger goes crazy every time I try to step into icafe methods. No idea why.

dragon66 commented 7 years ago

@sinedsem I can't reproduce the result you mentioned using the test image you provided.

dragon66 commented 7 years ago

Before insert IPTC:

2017-02-16 19:26:48,803 [main] INFO  com.icafe4j.image.meta.adobe.IRB - <<Adobe IRB information starts>>
2017-02-16 19:26:48,803 [main] INFO  com.icafe4j.image.meta.adobe._8BIM - IPTC_NAA [Value: 0x0404] - IPTC-NAA record.
2017-02-16 19:26:48,803 [main] INFO  com.icafe4j.image.meta.adobe._8BIM - Type: 8BIM
2017-02-16 19:26:48,803 [main] INFO  com.icafe4j.image.meta.adobe._8BIM - Name: iptc
2017-02-16 19:26:48,803 [main] INFO  com.icafe4j.image.meta.adobe._8BIM - Size: 46
2017-02-16 19:26:48,804 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Record number 2: Application Record
2017-02-16 19:26:48,804 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Dataset name: ByLine
2017-02-16 19:26:48,804 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Dataset tag: 80[0x0050]
2017-02-16 19:26:48,804 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Dataset size: 31
2017-02-16 19:26:48,804 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Dataset value: Svetlana ©Shirokova © Saranai
2017-02-16 19:26:48,804 [main] INFO  com.icafe4j.image.meta.adobe.IRB - <<Adobe IRB information ends>>

After insert IPTC:

2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.test.TestMetadata - Metadata entry 3 - PHOTOSHOP_IRB
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.adobe.IRB - <<Adobe IRB information starts>>
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.adobe._8BIM - IPTC_NAA [Value: 0x0404] - IPTC-NAA record.
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.adobe._8BIM - Type: 8BIM
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.adobe._8BIM - Name: IPTC_NAA
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.adobe._8BIM - Size: 14
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Record number 2: Application Record
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Dataset name: ObjectName
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Dataset tag: 5[0x0005]
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Dataset size: 9
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.iptc.IPTCDataSet - Dataset value: I have ©
2017-02-16 19:30:33,038 [main] INFO  com.icafe4j.image.meta.adobe.IRB - <<Adobe IRB information ends>>
sinedsem commented 7 years ago

Possibly something Locale-depended.. I'll check again myself.

sinedsem commented 7 years ago

Ok, I am closing this issue, as it's definitely not related to icafe, but..

The following code prints correct string to console, but if I use FileOutput stream, I get 'B' symbol before ©

ArrayList<IPTCDataSet> iptcDataSets = new ArrayList<>();
iptcDataSets.add(new IPTCDataSet(IPTCApplicationTag.OBJECT_NAME, "I have ©"));
FileInputStream is = new FileInputStream("C:\\Users\\Denis\\Desktop\\metadata\\6.jpg");
//        FileOutputStream os = new FileOutputStream("C:\\Users\\Denis\\Desktop\\metadata\\result.jpg");
ByteArrayOutputStream os = new ByteArrayOutputStream();
Metadata.insertIPTC(is, os, iptcDataSets, true);
is.close();
System.out.println(new String(os.toByteArray(), "utf-8"));
os.close();
sinedsem commented 7 years ago

Ok, I really sorry for opening this issue. The problem that both Adobe Bridge and Exif Pilot uses cp1251 uncoding, while I wanted to use utf-8.