Creating website thumbnail images in ASP.NET

Following on from my post about generating PDF thumbnails in ASP.NET, here is another one about generating website thumbnail images using DynamicImage.

<sitdap:DynamicImage runat="server" ImageFormat="Jpeg">
	<Layers>
		<sitdap:WebsiteScreenshotLayer WebsiteUrl="http://www.microsoft.com">
			<Filters>
				<sitdap:ResizeFilter Width="500" Mode="UseWidth" />
			</Filters>
		</sitdap:WebsiteScreenshotLayer>
	</Layers>
</sitdap:DynamicImage>

You can also use the fluent interface:

string imageUrl = new DynamicImageBuilder()
	.WithLayer(
		new WebsiteScreenshotLayerBuilder().WebsiteUrl("http://www.microsoft.com")
		.WithFilter(FilterBuilder.Resize.ToWidth(500))
	).Url;

The preceding code will result in this image:

As you can see, the image is of the whole web page, not just the cropped window you’d normally see. If you want that, you can use the Crop filter:

<sitdap:DynamicImage runat="server" ImageFormat="Jpeg">
	<Layers>
		<sitdap:WebsiteScreenshotLayer WebsiteUrl="http://www.microsoft.com">
			<Filters>
				<sitdap:ResizeFilter Width="500" Mode="UseWidth" />
				<sitdap:CropFilter Width="500" Height="500" />
			</Filters>
		</sitdap:WebsiteScreenshotLayer>
	</Layers>
</sitdap:DynamicImage>

Now you should have:

You can optionally specify a timeout, after which if the screenshot capture process hasn’t finished, it will terminate and not produce an image.

<sitdap:WebsiteScreenshotLayer WebsiteUrl="http://www.microsoft.com" Timeout="3000" />
new WebsiteScreenshotLayerBuilder()
	.WebsiteUrl("http://www.microsoft.com")
	.Timeout(3000)

Since these images will take a while to produce, you’ll probably want to enable caching in DynamicImage.

Thanks are due to to ‘NoLoveLust’s work on wrapping CutyCapt.exe, which provided a starting point for this code.

To get it working, you’ll need to copy CutyCapt.exe from the Tools folder in the repo to App_Data/DynamicImage.