Subscribe to our RSS feed!

URL Thumbnails In Coldfusion 8

A reader asked me this morning if ColdFusion 8 can create images from URLs.

This is often used to provide a snap shot of a remote site. Turns out this is relatively easy. Damon Cooper of Adobe showed an example of this a few weeks ago. It takes all of two tags:

<cfdocument src="http://www.coldfusionjedi.com" name="pdfdata" format="pdf" />
<cfpdf source="pdfdata" pages="1" action="thumbnail" destination="." format="jpg" overwrite="true" resolution="high" scale="25">


The first line simply uses cfdocument with the src attribute. I point to a URL (in this case, my blog) and store the result in a PDF variable.

Next I use the cfpdf tag to create a thumbnail. I specify the JPG format, use a high resolution, and set a scale to 25% just for the heck of it. Also note I only do page 1. By default the cfpdf/action="thumbnail" tag will create a thumbnail for each page of the PDF, but all we really want is the first page.

That's it. Done. Complete. Simple as pie. But of course I had to go a bit crazy and make a UDF out of it. The code below allows you to pass a URL (and an optional scale). It will then handle making the image, reading it into a CF8 Image object, deleting the file, and returning the object. You can then save it, or do whatever. For my tests, I did:

<cfset myimage = getThumbnail("http://www.coldfusionjedi.com",30)>
<cfimage action="writeToBrowser" source="#myimage#">


The "writeToBrowser" action lets me test without actually saving a file, but I believe it doesn't work in IE. (Not that I care.) Enjoy, and let me know how it works for you. I'll probably add options to let you specify an image type as well.

The image quality is pretty good I think. It is not the same as what you see from Firefox, but for a thumbnail, I think it works ok:



<cffunction name="getThumbnail" returnType="any" output="false">
   <cfargument name="url" type="string" required="true">
   <cfargument name="scale" type="numeric" required="false" default="25">

   <cfset var pdfdata = "">
   <cfset var prefix = replace(createUUID(),"-","_","all")>
   <cfset var myimage = "">

   <!--- make the pdf --->
   <cfdocument src="#arguments.url#" name="pdfdata" format="pdf" />

   <!--- write out the image --->
   <cfpdf source="pdfdata" pages="1" action="thumbnail" destination="." format="jpg" overwrite="true"
    resolution="high" scale="#arguments.scale#" imagePrefix="#prefix#">

   <!--- read it in --->
   <cfset myimage = imageNew(expandPath('./#prefix#_page_1.jpg'))>

   <!--- clean it up --->
   <cffile action="delete" file="#expandPath('./#prefix#_page_1.jpg')#">
   <cfreturn myimage>
</cffunction>


Comments

Bookmark and Share

About the author:
Raymond Camden, ray@camdenfamily.com
http://ray.camdenfamily.com

Raymond Camden is Vice President of Technology for roundpeg, Inc. A long time ColdFusion user, Raymond has worked on numerous ColdFusion books and is the creator of many of the most popular ColdFusion community web sites. He is an Adobe Community Expert, user group manager, and the proud father of three little bundles of joy.
Get Your Site Submitted for Free in the World's Largest B2B Directory!

*Mandatory Field
* *

URL Thumbnails in Coldfusion 8