Как я могу отобразить изображение в репитере или сетке? - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть около 200 изображений для отображения на странице.

База данных хранит только путь, в котором находится изображение. Сами изображения хранятся в папке приложения. Например: d: / application / website / images /

  • Мне нужно преобразовать оригинальное изображение в миниатюру при отображении миниатюры
  • Есть ли какая-либо функциональность для этого?
  • В идеале дисплей должен иметь 5 строк и 5 столбцов, а затем использовать подкачку для отображения остальных данных.

По сути, галерея изображений: приложение отображает миниатюру изображения на странице сетки / повторителя, и когда пользователь нажимает на эту миниатюру, открывается новое всплывающее окно, отображающее все изображение. Могу ли я сделать эту работу с управлением повторителя?

Любая идея, как отображать миниатюры изображений в репитере.

Существуют ли веб-сайты, которые могут мне помочь?

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

Прежде всего, я должен сказать, что хранение миниатюр на сервере, вероятно, будет гораздо более эффективным, чем это решение. Некоторые из принципов в этом коде могут быть использованы для создания этих миниатюр при загрузке изображений. Это, вероятно, будет лучшим путем.

Как говорится, вот возможное решение. Это было взломано вместе очень быстро, но это работает. Я использую нечто подобное, чтобы обслуживать вложения из базы данных. Создайте новую страницу 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 верны и т. Д.

Когда вы закончите, вы можете использовать этот URL (что-то вроде http://localhost/Handler.ashx?filename=myFirstImage) в ретрансляторе для создания ваших миниатюр.

0 голосов
/ 27 мая 2013

Я знаю, что этот пост очень старый, но все же он может быть полезен для всех У меня была та же проблема, и я использовал эту кодировку.

Файл конфигурации

<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);
    }
}
...