最近访问凡客诚品产品页留意了一下,这个页面的一些图动态做成了雪碧图,如:
从这张图片我们可以看到.SpriteWashings这个样式的背景图是通过joinimages.ashx动态生成,这个想法很好,但是没有生成样式。所以它的html使用了style="background-position: 0px -80px"这个来定位,个人认为这种方式不好,应该通过添加class 来定位,这就需要生成雪碧图的时候要生成相应的样式。
生成雪碧图的原理很简单:根据多个图片地址生成对应的Bitmap,在把这些Bitmap画到一个Bitmap上。
其核心代码如下:
private static bool GenerateSprite(ImageSettings settings, int x, int y, List<Bitmap> images, StringBuilder cssCompatOutput)
{
if (settings.TileInYAxis)
{
y += images.Count;
}
else
{
x += images.Count;
}
using (Bitmap sprite = new Bitmap(x, y))
{
using (Graphics drawingSurface = Graphics.FromImage(sprite))
{
drawingSurface.Clear(settings.BackgroundColor);
int xOffset = 0;
int yOffset = 0;
foreach (Bitmap image in images)
{
drawingSurface.DrawImage(image, new Rectangle(xOffset, yOffset, image.Width, image.Height));
if (image.Tag != null)
Gener