使用预定义图像集创建头像

时间:2012-03-19 12:38:14

标签: c# css asp.net-mvc image-manipulation avatar-generation

这个问题更多的是关于指导而不是实际解决我的问题:

我需要使用大量分类图片在C# 中创建头像创建者。

概念非常简单,但我从未在代码中操作图像,因此我需要一些提示和指示。

我设想它的工作方式是系统有两个部分:

  1. 使用HTML+CSS允许用户选择和定位多个图片的前端
  2. 保存操作会将这些图像/图层及其位置发送到服务器,然后将其作为展平的图像文件写出来
  3.   

    现在,这是我的假设这个系统应该如何运作。如果没有,提示/指针将受到高度赞赏。

    继承假设:

    我有一种模糊的感觉,我需要使用Canvas在客户端为第一部分创建图像。虽然这带来了浏览器支持的问题。 Canvas会在这里成为解决方案,还是我会更好地使用普通HTML4+CSS2。回溯一下,Canvas甚至可以为它增加任何好处吗?我在Google的反馈/问题报告系统中看到了Canvas的强大功能,他们使用这个元素来做客户端截图!

    对于第二部分,我没有任何线索。当我问这个问题时,我正在阅读/研究C#中的图像创建,并且出现GDI+Image Library这样的行话。

    相关问题:

    Gravatar或PHP不是选项!

    PS:我希望根据我的研究/调查结果以及SO社区提供的任何帮助来编辑这个问题,但我认为这不是一个讨论。由于我对SO的研究没有提供太多的线索,我相信我们可以将这个社区维基与最佳答案/建议合并为一个帖子。感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用简单的ASP / HTML和回发来显示基于他们从组合框和其他控件中选择的不同选项的图像。

回发仍然会导致浏览器短暂延迟,以便使用新图片重新下载页面。一种选择是您可以使用AJAX只下载新图像而无需重新加载整个页面。这可能会在不需要Flash / Silverlight的情况下提供最佳体验。

您将拥有多少种不同的图像组合?您可以以编程方式预先计算所有可能的组合并存储它们。这将占用更多存储空间,但处理能力更低,回发速度也更快。

如果要为每个请求生成图像,可以使用以下方法在Bitmap上绘制每个图像:

Bitmap avatarBitmap = new Bitmap(AvatarWidth, AvatarHeight);
using (Graphics g = Graphics.FromImage(avatarBitmap))
{
    foreach (Bitmap bitmap in ListOfImagesToDraw)
    {
        g.DrawImage(bitmap, 0, 0);
    }
}
avatarBitmap.Save(fileName, ImageFormat.Png);

这将要求每个项目都在相同大小的位图内,以便它们可以对齐。例如,如果在Photoshop中制作所有图像,则可以使每个项目成为具有透明背景的同一图像的图层。然后,您可以执行批量保存,将每个图层保存到自己的文件中。

如果你需要定义一个Z顺序,以便在其他图像的顶部绘制一些图像(例如,太阳镜绘制在头顶而不是后面),只需确保ListOfImagesToDraw中的图像顺序正确。阵列。该数组将由回发中的信息生成。