日期:2014-05-17  浏览次数:21501 次

如何将多个图片合并到一个文件流,一同输出到网页显示
现在我需要根据某条信息读出它所有的图片信息,然后为了不让别人直接看到真是图片地址是打算通过ashx直接resnponse输出图片,但问题是如何才能将多个图片同时输出显示?我始终只能显示出第一张图片.
下面是我写的部分代码,打算将多个图片写进一个文件流然后在一起输出,但结果还是只有第一张图,其中images是一个List<String>集合,存放的是图片的路径
C# code

response.ContentType = "image/jpeg";
                    var stream = new MemoryStream();
                    foreach (var img in images)
                    {
                        var imgbyte = File.ReadAllBytes(Sph.Common.Variables.ImgUploadRootPath + img.TrimStart('/'));
                        stream.Write(imgbyte, 0, imgbyte.Length);
                    }
                    stream.Close();
                    response.BinaryWrite(stream.GetBuffer());
                    response.Flush();



请问该如何修改,能同时将多个图片输出显示?

------解决方案--------------------
response.ContentType = "image/jpeg";

这样只能输出一个图片。,

要是多张图片,必须合成为一张才你输出
------解决方案--------------------
后台只能刷一次,你可以在前台页面指定图片id,后台根据id不同刷出不同的图片在同一个页面上,前台指定多个图片的不同链接。
------解决方案--------------------
你的方法没法放回多张图片。
我能想到两个方法
1. 把图片存在服务器端,在多个Image控件指向不同的图片。
用动态创建控件, 或者DataList都可以实现,不难。

2. 服务器端合成一个图片并返回。
用GDI+,下面代码是我的缩小图片尺寸的代码,在asp.net中使用的。你可以参考它自己写合并多张图片的代码。
C# code

private void ReduceImageSize(string filePath)
        {
            using (MemoryStream OrgImageMemory = new MemoryStream(File.ReadAllBytes(filePath)))
            {
                using (Image orgImage = Image.FromStream(OrgImageMemory))
                {
                    using (Bitmap result = new Bitmap(orgImage.Width / 2, orgImage.Height / 2))
                    {
                        result.SetResolution(orgImage.HorizontalResolution / 2, orgImage.VerticalResolution / 2);

                        using (Graphics graphics = Graphics.FromImage(result))
                        {
                            graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                            graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

                            graphics.DrawImage(orgImage, 0, 0, result.Width, result.Height);
                        }

                        result.Save(filePath);
                    }
                }
            }
        }

------解决方案--------------------
页面
HTML code
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
  <Columns>
  <asp:BoundField DataField="PersonName" />
  <asp:ImageField DataImageUrlField="PersonId" DataImageUrlFormatString="ShowImage.aspx?id={0}"/>  
  </Columns>
  </asp:GridView>