A new extension, “Image Information” is now available for download. Comments and feedback can be left here but if you discover any issues, please post it on the issue tracker.

It seems there is the need to have Iptc and Exif data available in symphony, so I thought an extension would have been useful :)

Cool extension!

You know, I was winging the other day about needing IPTC info in Symphony, great job!

I will play with this… NOW! lol.

Oh, I’ve just seen the IPTC link… lmao… That’s ME!

I’m really impressed with how easy this is to use as a datasource, I just can’t seem to get it to work with a dynamic parameter.

My dynamic param from my projects-images datasource is {ds-projects-images} which I’m adding to the entries url parameter in the datasource for this extension. It doesn’t return anything in the xml though.

How can I get this functionality to work?

This is great - I have something that I’ve been meaning to build for months that will take advantage of this!

One niggle - the double plural on the name of the extension is a bit grating: perhaps you could name it “Image Information” instead?

Thanks guys for testing this.

@designermonkey Be aware that datasource output caching can cause problems if you’re not sure what you’re doing, because the result isn’t refreshed until the cache get stale. So my suggestion is to test the output directly typing the service.php URL in your browser and see how it goes (be sure to inspect the page source). If that work, then the problem must be elsewhere.

Also, don’t know if it’s a typo, but the DS param you posted miss a $.

@tonyarnold Thanks for the suggestion, I definitely have to improve my English skills. I’ll change it as soon as possible :)

It was a typo…

I’ve tried tp type the url in the browser, which, if I list some entries, works. If I type in the parameter, it doesn’t…

I’ve looked through the code, and I can’t seem to understand how it would use a datasource output param. Doesn’t the datasource have to be called for it to populate the parameter? How is this plugin calling the datasource?

I’m really weirded out now… It works! I havent changed anythong either…

Really great extension, exactly what I’ve been looking for with regards to iptc info…

@tonyarnold I wasn’t going to say anything ;)

I’m really weirded out now… It works! I havent changed anythong either…

This is exactly the kind of caching trouble I mentioned above.

However, glad it worked!

See now, I didn’t even know that datasources were cached. More reading for me I think…

Thanks alpacaaa!

I didn’t even know that datasources were cached

Dynamic XML Data Sources are (you invoke this extension using one) — go ahead and create one now and you’ll see the cache time in the Data Source editor :-)

I’ve added a little extra functionality to this extension that may interest some… As I don’t use git or subversion yet, I’m having to post my changes here for someone else to maybe add to the extension (if it’s ok)

I’ve added handles to the iptc xml nodes. These handles are the iptc labels for the fields, as listed in the documentation from the iptc org

Add the following function into class.images_info.php

public static function iptcHandle($tag){
    $handle = "";
    if($tag === "2#004"){$handle = "intellectual-genre";}
    if($tag === "2#005"){$handle = "title";}
    if($tag === "2#009"){$handle = "urgency";}
    if($tag === "2#012"){$handle = "subject-code";}
    if($tag === "2#015"){$handle = "category";}
    if($tag === "2#020"){$handle = "supplemental-category";}
    if($tag === "2#025"){$handle = "keywords";}
    if($tag === "2#040"){$handle = "special-instructions";}
    if($tag === "2#055"){$handle = "date-created";}
    if($tag === "2#080"){$handle = "creator";}
    if($tag === "2#085"){$handle = "creator-job-title";}
    if($tag === "2#090"){$handle = "city";}
    if($tag === "2#092"){$handle = "location";}
    if($tag === "2#095"){$handle = "state";}
    if($tag === "2#100"){$handle = "iso-country-code";}
    if($tag === "2#101"){$handle = "country";}
    if($tag === "2#103"){$handle = "job-identifier";}
    if($tag === "2#105"){$handle = "headline";}
    if($tag === "2#110"){$handle = "provider";}
    if($tag === "2#115"){$handle = "source";}
    if($tag === "2#116"){$handle = "copyright-notice";}
    if($tag === "2#120"){$handle = "description";}
    if($tag === "2#122"){$handle = "description-writer";}
    return $handle;

change the following function in class.images_info.php

public static function processIptc($img, $node = 'iptc')
    getimagesize($img, $info);
    $node = new XMLElement($node);

        $iptc = iptcparse($info['APP13']);

        foreach ($iptc as $tag => $val)
            $temp = new XMLElement(
                array('tag' => $tag, 'handle' => self::iptcHandle($tag))

    return $node;

This adds the handle attribute to the xml output. Someone may be able to find a better way to write the added function, it’s just a quick fix for now…

Hope this is useful!

Image Information updated to version 0.0.1 on 12th of April 2010

Thanks @designermonkey I’ve just committed your changes. I did a minor modification though, to mantain consistency — tag holds the human readable data (as for exif) while handle holds the alphanumeric id.

Also, this is fully compatiable with 2.0.8RC1, I have absolutely no issues whatsoever…

I’ve just thought as well, to keep in line with the Exif data, maybe the tags for iptc should follow the same TagNamingConvention not tag-naming-convention

I may be being a little anal here ;)

Could you tell us a bit more about what you use this for, with what workflow?
I am researching the most convenient way to publish and maintain a whole bunch of tagged photos as a product catalog in symphony. I see 3 options;

  1. with section links and all tags into a (db searchable) section
  2. upload them to picasaweb (convenient from picasa app; update possible) and import as external DS
  3. upload to my site after they have been tagged in, iphoto or other app, and then use this extension.

Mainly I wonder about the tags not being in the DB but in the image file itself, and about wether it’s OK to use picasaweb as a source for commercial product catalog photos.

Maybe I shoudl use Nilses Subsection Manager, but somehow combine it with your extension so the tags are automagically pulled out of the uploaded pictures and placed into fields. (so i can do pre-tagging in my photo-managing app, and dont need to tag wehn uploading)

About Picasa Web: I think it can be used commercially, from what I derive from An advantage of using Picasa Web is that you can use Google’s search functionality when searching for certain tags. I don’t know how useful Picasa Web would be when you are maintaining a very large database of photos with keywords when you want to quickly access an index of the keywords.

@newnomad I’m writing a portfolio site for a friend, and before I had the great idea to use Symphony, I’d decided that for ease of use I would have the photographer do all his image management in his copy of Lightroom, and just ftp the images into a folder on the site. I wasn’t even going to use a database originally, just the IPTC info stored in the fully tagged and meta-data filled images. I believe that this way is better, as if the image is changed, those changes don’t have to be re-copied into the db.

Since using Symphony, I’ve come across some problems and had to change the plans a little, but it is a good way of working.

I use a Projects section to house the info about the shoot/project, and then the info for the individual images is pulled from themselves, saves arsing about filling in fields manually (as I don’t know how to make extensions to do it automagically).

I’m sure there’s possibly a good reason not to do this, but with my friend wanting to upload 600 images at once, it’s a good answer.

Oh, forgot to say I have to use the Mass Upload Utility extension to upload the images and fill a very basic images section (file, date fields only), I would love to develop it a little to pull the IPTC keywords in to a tag list, but I really wouldn’t know where to start…

Create an account or sign in to comment.

Symphony • Open Source XSLT CMS

Server Requirements

  • PHP 5.3-5.6 or 7.0-7.3
  • PHP's LibXML module, with the XSLT extension enabled (--with-xsl)
  • MySQL 5.5 or above
  • An Apache or Litespeed webserver
  • Apache's mod_rewrite module or equivalent

Compatible Hosts

Sign in

Login details