"Beck, Jonas" <[EMAIL PROTECTED]> writes: Hi Jonas
> i have to convert about 40000 pictures using a php skript - part of > that conversion is the addition/modification of the EXIF data of all > that images. PEL seemed perfect for the job, especially as the JPEG > MetadataToolkit is not able to create new EXIF data so easily. Wow, that is a lot of photos! I'm glad to hear that PEL is being pushed to its limits. > If an image has no EXIF data yet I want to add some - to some extend > that works as expected, but if I try to add those winXP EXIF tags, > PEL wont read them. They are written to the header - as I can view > them with the JPEG MetadataToolkit, but windows wont show them. If I > write them in with windows, PEL wont show them. > > if use: > > $title = $ifd0->getEntry(PelTag::XP_TITLE); > > echo $title; > > if ($title == null) { > echo "Adding new XP_TITLE entry with value 'XP_TITLE'.<br>"; > $title = new PelEntryWindowsString(PelTag::XP_TITLE, "CATDog"); > $ifd0->addEntry($title); > } else { > echo "Updating XP_TITLE entry from '".$title->getValue()."' to > 'XP_TITLE'<br>"; > $title->setValue("XP_TITLE"); > } > > to check for an XP_TITLE, and create one if there isnt any. That should be the correct way to do it. > But there is never an XP_TITLE tag - even if windows shows it and I > can read it in the EXIF data. PEL just wont get it. Okay... As I don't use Windows, these XP_* tags have been only very lightly tested. And I have seen no reference on their format, all I know is that the test image I got used a format like this for your example of "CATDog": 'C' 0x00 'A' 0x00 'T' 0x00 'D' 0x00 'o' 0x00 'g' So PEL simply loads data from these tags by skipping over NULL bytes and saves it again with a NULL byte between each byte of text. You can find the code in PelEntryByte.php line 238 and PelIfd.php line 404. > if I do a > > $tags = $ifd0->getEntries(); > > foreach($tags as $nr=>$tag) echo "$nr ".$tag->getValue()."<br>"; > > directly after the above code - the XP_TITLE tag is found. This is because the data is kept in the PelEntryWindowsString object just created. The data is kept in decoded form (as "CATDog"). > if I have PEL save the data, load it again, and then run the lines > above again, the XP_TITLE tag isnt found anymore (but there). That sounds like a bug. > this only happens for tags I create with > > new PelEntryByte(PelTag::PEL_TAG, "string"); > > my > > $desc = new PelEntryAscii(PelTag::IMAGE_DESCRIPTION, $description); > > is saved and found after that just like it should. That is also tested much more, both by users and by the unit tests. > anybody got an idea of how to fix this - or is it me being stupid? I don't know a fix for this, and unfortunately I don't have time to debug this now. For debugging I suggest you use a hex editor (I've used ghex) and lots of print statements. Try inserting a tag using WinXP, and dump it with debug output (dump-image.php -d or Pel::setDebug(true)). That gives you some information about the offsets found by PEL, maybe you can learn something from this. -- Martin Geisler --- <[EMAIL PROTECTED]> --- http://mgeisler.net
pgp8xJN3rmQDB.pgp
Description: PGP signature
------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________ PEL-devel mailing list PEL-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pel-devel