Operated by John-Riley Harper. Dedicated to archiving photography from Utah's underground scenes, as well as other personal projects.

3.06.2006
Javascript & Photoshop's Gallery
Photoshop's Web Photo Gallery is a powerful tool with endless possibilities--despite its benign appearance. On the most basic level, it allows a user to import selected images to be resized, thumbnailed, and embedded into a html gallery. Each image gets its very own html page, navigation, and more. Once this is created, a user can upload the entire directory to the web and they'll have a webpage. It is a suprisingly unused tool, and almost undocumented on the web. Only a hardful of sites talk about it, but nothing that I've seen really explores what you can do with the tool. I think the reason is that it seems, on the surface, to be almost uncustomizeable. The built in templates are interesting to look through, but no self-respecting web designer would be satisfied using someone else's design.

Where it gets interesting is when you explore how the templates are put together. It's actually just simple html! The information that photoshop uses are located in /[photoshop directory]/presets/web photo gallery/. Here you can see how the structure within the program mirrors your hard drive:



There's nothing tricky or hidden. It's all simply files and images that photoshop uses to generate full html pages out of. This means that if you have any understanding of html you have complete control. If you want to call your own custom images, simply put them in the /images/ directory. The .html pages are easily managed with any editor (including textpad if you've got the guts). Here's an example of how the file structure looks:



For integration with photoshop, Adobe has developed special codes that you can place in the html files that they call "tokens." These tokens allow for variables within the"Web Photo Gallery." For example, a token $BGCOLOR$ would allow you to set the background color within in the photoshop appletinstead of having to go through thecode and changing it, like this:



This means that once you have your templateset up, simple maintanence and color customization can all be done from photoshop without the hassle of html editing.

A useful photoshop token is called %NEXTIMAGE%, which generates a unique html address when it is called on within a subpage (the page you get to once you click on a specific thumbnail). So, for the html page looking at photo1.jpg, the %NEXTIMAGE% token would generate something like, "http://webaddress.edu/pages/photo2.html" after photoshop operated. Note that it generates a link to an html file, not an actual .jpg. Whiih brings me to:

Limitations - There is nothing built into the token code to generate a link to the image url in the next image. This proved to be quite a headache for me because I was interested in 'preloading.' Preloading images speeds up navigation for other people by calling up the file that you think a viewer will click to next. It loads in the background as your viewer is looking at what is already on screen. Hopefully, when they click to look at the next page the image will have already been loaded in the background, and then the browser covertly load the next file. But, without a way to call up the address to the next .jpg, navigation would be a bit groggy.

I tried to figure this out all last week. It may be that the solution is so simple that it's a given for most, but it was tough for me to figure out.

Since we have a code which will give us the address to the next html page, it is only a directory and an extention away from the address wanted. We want the address:

[rootdir]/pages/image_xx.html
to switch to
[rootdir]/images/image_xx.jpg



Here is where javascript can be a real help. Javascript allows you to set up variables, and then you can operate on those variables. We are going to make the html data be a variable, use the .indexOf operator to find where to cut, and then the .substring command to snip. As you can see, Photoshop's token %NEXTIMAGE_CIRCULAR%' is set up as the variable: "nxtimg." The variable "bad_ext" finds that offending .htm and stores the position as a number. This means that we can use the number of where the charater starts when we write the html, and snip appropriately.

This is where the document.write command comes in. It writes a simple <img src code, with the new /images/ directory, and then snips the filename from the zeroth position to the extention. Tadaa! If you add a css classification to make it hidden, you then have an image that loads, but is not seen.

<script type="text/javascript">
var nxtimg = '%NEXTIMAGE_CIRCULAR%';
var bad_ext = nxtimg.indexOf(".htm");
document.write
('<img src="../images/' + (nxtimg.substring(1,bad_ext)) + 'jpg" class="hiddenPic">' );
</script>


And there you have it. The solution that I wish had already existed last week. What's nice is that with this code you could expand it with an <a href=%NEXTIMAGE%... or <a href="PREVIMAGE%... tocreate the popular effect of having thumbnails of the 'next image' and the 'previous image' on each sub page. If you have any questions on specific implementations, don't hesitate to email.

Labels: ,

114168982926297668  

0 Comments:


  • Archives:
  • August 2015
  • June 2015
  • May 2014
  • July 2012
  • April 2012
  • March 2011
  • February 2011
  • August 2010
  • January 2010
  • December 2009
  • July 2009
  • June 2009
  • April 2009
  • March 2009
  • February 2009
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • September 2007
  • August 2007
  • July 2007
  • June 2007
  • May 2007
  • April 2007
  • March 2007
  • February 2007
  • January 2007
  • November 2006
  • October 2006
  • September 2006
  • August 2006
  • July 2006
  • June 2006
  • May 2006
  • April 2006
  • March 2006
  • February 2006
  • January 2006
  • September 2005
  • May 2005
  • February 2005
  • January 2005
  • December 2004
  • November 2004
  • October 2004
  • August 2004
  • July 2004
  • June 2004
  • May 2004
  • April 2004
  • March 2004
  • February 2004
  • January 2004
  • December 2003
  • October 2003
  • September 2003
  • August 2003
  • July 2003
  • June 2003
  • May 2003
  • April 2003
  • March 2003
  • February 2003