我有大约200张图片要显示在页面上。
数据库仅存储图像所在的路径。图像本身存储在应用程序的文件夹中。 EG:d:/ application / website / images /
基本上,图片库:应用程序在网格/转发器页面上显示缩略图图像,当用户点击该缩略图时,将打开一个新的弹出窗口,显示整个图像。我可以使用转发器控件来完成这项工作吗?
知道如何在转发器控件中显示缩略图图像。
是否有任何网站可以帮助我?
答案 0 :(得分:1)
首先,我需要说在服务器上存储缩略图可能比这个解决方案更有效。在上传图像时,此代码中的一些原则可用于创建这些缩略图。这可能是一个更好的方式。
话虽如此,这是一个可能的解决方案。这很快被黑客攻击,但确实有效。我使用类似的东西来提供数据库中的附件。创建一个新的ashx页面如下:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
Bitmap b = new Bitmap(@"c:\temp\pictures\" + context.Request.QueryString["filename"]);
Image i = b.GetThumbnailImage(48, 48, null, System.IntPtr.Zero);
using (MemoryStream ms = new MemoryStream())
{
i.Save(ms, ImageFormat.Jpeg);
context.Response.BinaryWrite(ms.ToArray());
}
context.Response.ContentType = "image/jpeg";
}
public bool IsReusable
{
get
{
return false;
}
}
}
这将找到一个文件,该文件的名称从查询字符串传入,并创建缩略图并使用内存流来显示图像。您显然必须调整路径,错误处理,确保mime类型正确等等。
完成此操作后,您可以在转发器中使用此网址(例如http://localhost/Handler.ashx?filename=myFirstImage)来生成缩略图。
答案 1 :(得分:0)
我知道这篇文章现在已经很老了,但它对任何人都有帮助。我有同样的问题,并使用了这个编码。
配置文件
<add key="WebResources" value="~/Assets/WebResources/" />
<add key="ImageRoot" value="Images\Web" />
<add key="ProfileImages" value="Images\Profile" />
Asp.Net Datalist
<asp:DataList ID="dlPrivateAlbum" runat="server" OnItemCommand="dlPublicAlbum_ItemCommand" RepeatDirection="Horizontal" RepeatLayout="Flow">
<ItemTemplate>
<div class="boxgrid captionfull">
<asp:Literal ID="lit_ImagePath" runat="server" Text='<%# Eval("URL") %>' Visible="false" />
<asp:HyperLink runat="server" Target="_blank" ToolTip='<%#Eval("Description") %>'
ImageUrl='<%# ConfigurationManager.AppSettings["WebResources"] + ConfigurationManager.AppSettings["ProfileImages"] + @"\thumbs\" + Eval("URL") %>'
NavigateUrl='<%# ConfigurationManager.AppSettings["WebResources"] + ConfigurationManager.AppSettings["ProfileImages"] + @"\" + Eval("URL") %>' />
<div class="cover boxcaption">
<asp:LinkButton ID="lnkbtn_Edit" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="edit" CssClass="captionlink" Text='<%#Eval("Title") %>' />
</div>
</div>
</ItemTemplate>
CSS:
.boxcaption{float:left;position:absolute;background:#000;height:70px;width:100%;opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);-MS-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"}
.captionfull .boxcaption{top:230px;left:0}
.caption .boxcaption{top:190px;left:0}
.captionlink:link, .captionlink:visited {color: #E2E2E2;text-decoration: none;}
.captionlink:hover { text-decoration: underline; }
.captionlink:active {color: #F5F5F5;}
代码背后:
private void load(Guid userID)
{
try
{
loadOptions();
DbContext = new Entities();
user = DbContext.UserProfiles.FirstOrDefault(d => d.UserID == userID);
List<Album> albums = DbContext.Albums.Where(d => d.UserID == userID).ToList();
if (albums != null)
{
dlPublicAlbum.DataSource = albums.FirstOrDefault(d => d.Type == "public").Images;
dlPublicAlbum.DataBind();
}
}
catch (Exception ex)
{
Msg.ShowAlert(this.Parent.Page, Msg.GeneralError_Title + " " + ex.GetType().Name, ex.Message, MsgType.Error);
}
}