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

本文关键字:创建 图像 预定义 | 更新日期: 2023-09-27 18:28:11

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

我需要使用一组巨大的分类图像在C#中制作一个阿凡达创作者。

概念上非常直接,但我从未在代码中处理过图像,所以我需要一些提示和指针。

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

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

现在,这是我对这样一个系统应该如何工作的假设。如果没有,我们将不胜感激。

继续假设:

我有一种模糊的感觉,我需要使用Canvas在客户端创建第一部分的图像。尽管这带来了浏览器支持的问题。Canvas是这里的解决方案吗,还是我最好使用普通的HTML4+CSS2。回溯一下,Canvas会给它带来什么好处吗?我在谷歌的反馈/问题报告系统中看到了Canvas的强大功能,他们使用这个元素来进行客户端屏幕截图!

对于第二部分,我一无所知。当我问这个问题时,我正在阅读/研究C#中的图像创建,像GDI+Image Library这样的术语正在出现。

相关问题:

  • C#:将多个图像保存到一个文件
  • 有没有我可以偷或看的合成化身脚本
  • 用于化身创建的jQuery/JavaScript库

Gravatar或PHP不是选项

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

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

您可以使用带有回发的简单ASP/HTML,根据组合框和其他控件中的不同选项显示图像。

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

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

如果你想为每个请求生成一个图像,你可以用以下方法在位图上绘制每个图像:

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数组中的顺序正确。此数组将由回发中的信息生成。