从几个重叠的png创建一个jpeg

Ste*_*ven 4 c# asp.net gdi+ image bitmap

因此,在我的网站上,用户可以创建头像.它是由用户从多个图像中选择而创建的; 有一个基本的"皮肤"图像,png与图像重叠,描绘了头发,眼睛,嘴巴等.

我无法将用户的头像保存到项目的文件中,因此用户的头像数据存储在数据库中,并且png在运行中重叠并显示给用户.

但是,我希望用户能够通过访问页面将他们的头像下载为jpeg.

我有一个正常工作的小例子设置:

protected void Page_Load(object sender, EventArgs e)
{
    //User has skin1.png, eyes3.png, and mouth8.png
    Bitmap bit = new Bitmap(System.Drawing.Image.FromFile(Server.MapPath("/images/skin1.png")), 80, 106);

    Response.ContentType = "image/jpeg";
    bit.Save(Response.OutputStream, ImageFormat.Jpeg);
}

但是,正如您所看到的,我只能将其用于单个图像.我想从多个png创建一个位图并输出一个jpeg.

有人可以帮忙吗?

Guf*_*ffa 5

您可以将图像绘制在彼此之上.PNG图像的透明度处理正确,但由于JPEG图像没有任何透明度,您需要绘制背景颜色.

请务必小心处理图形和位图对象.它们甚至不建议用于Web应用程序......

// create image to draw on
using (Bitmap bit = new Bitmap(80, 106)) {
  // fill with background
  bit.Clear(Color.White);
  // images to load
  string[] skins = new string[] { "skin1.png", "eyes3.png", "mouth8.png" };
  // create graphics object for drawing on the bitmap
  using (Graphics g = Graphics.FromImage(bit)) {
    foreach (string skin in skins) {
      // load image
      using (Image skinImage = Image.FromFile(Server.MapPath("/images/" + skin)) {
        // draw image
        g.DrawImage(skinImage, 0, 0, 80, 106);
      }
    }
  }
  Response.ContentType = "image/jpeg";
  bit.Save(Response.OutputStream, ImageFormat.Jpeg);
}
Run Code Online (Sandbox Code Playgroud)