Avatar billede over-load Nybegynder
06. august 2005 - 18:04 Der er 11 kommentarer og
1 løsning

Billede Fremvisning

Hey!
Jeg har en masse billeder jeg gerne vil fremvise på min hjemmeside. Dog synes jeg måden jeg selv ville gøre det på, var alt for tidskrævende, da der er godt 500!

Så jeg tænkte om der var nogle smarte hoveder der kunne fortælle mig hvordan jeg kan scalere billederne ned til x * y, så man kan se hvilket billede det er man vælger. Og når man så trykker på denne, vil få det originale billede i fuld størrelse?

PS. Hvilket sprog dette bliver gjort i er sådan set ligegyldigt, bare jeg får en lille pointer i hvad der skal rettest i, for at indsætte de forskeliige billeder.
Avatar billede softspot Forsker
06. august 2005 - 18:11 #1
ASP.NET giver dig bla. mulighed for at lave billedeskalering på serveren, hvilket betyder at du ikke behøver et 3. partsprogram som f.eks. PhotoShop eller PaintShop Pro for at skalere billeder inde de kan ses på dit site.
Avatar billede over-load Nybegynder
06. august 2005 - 18:14 #2
okay - Har desvære meget lidt erfaring med Asp.net. Så er ikke klar over hvordan dette gøres
Avatar billede softspot Forsker
06. august 2005 - 18:16 #3
Har du adgang til en webserver som understøtter .NET?
Avatar billede over-load Nybegynder
06. august 2005 - 18:20 #4
Jepper
Avatar billede softspot Forsker
06. august 2005 - 18:23 #5
Jeg har noget kode som jeg selv bruger. Det aflæser et katalog på serveren, genererer thumbnails og skalerer desuden det "store" billede på serveren, når det efterspørges af klienten (i det tilfælde at billedet som i mit tilfælde er 2048x1536 og derfor stadig lidt for stort til en lille forbindelse). Koden er lidt "grovkornet", så det er ikke sikkert du kan bruge det direkte, men du kan måske bruge det som udgangspunkt for din egen implementering...
Avatar billede over-load Nybegynder
06. august 2005 - 18:24 #6
Jeg vil være glad hvis jeg fik mulighed for at kigge på denne :)
Avatar billede softspot Forsker
06. august 2005 - 18:41 #7
Jeg har flg. kode til en webform:

    public class WebForm1 : System.Web.UI.Page
    {
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
            bool isThumb = (Request.QueryString["t"] != null ? Convert.ToBoolean(Request.QueryString["t"]) : false);
            int width = (Request.QueryString["w"] != null ? Convert.ToInt32(Request.QueryString["w"]) : 770);
            int height = (Request.QueryString["h"] != null ? Convert.ToInt32(Request.QueryString["h"]) : 550);
            string filename = Request.QueryString["file"];

            if(filename != null)
            {
                MemoryStream ms = new MemoryStream();
                string thumbPath = Server.MapPath("thumbs/" + filename);
                string imagePath = Server.MapPath("images/" + filename);

                if(File.Exists(thumbPath) && isThumb)
                {
                    drw.Bitmap thumbImg = new drw.Bitmap(thumbPath);
                    thumbImg.Save(ms, drw.Imaging.ImageFormat.Jpeg);
                }
                else
                {
                    drw.Bitmap img = new drw.Bitmap(imagePath);
                    double vscale = (double)width / (double)img.Width;
                    double hscale = (double)height / (double)img.Height;

                    if(vscale > hscale)
                        width = Convert.ToInt32(img.Width * hscale);
                    else
                        height = Convert.ToInt32(img.Height * vscale);

                    drw.Bitmap scaledImg = null;
                    if(isThumb)
                        scaledImg = (drw.Bitmap)img.GetThumbnailImage(width, height, new drw.Image.GetThumbnailImageAbort(ImgAbort), IntPtr.Zero);
                    else
                        scaledImg = new drw.Bitmap(img, width, height);

                    scaledImg.Save(ms, drw.Imaging.ImageFormat.Jpeg);
                    if(!File.Exists(thumbPath))
                        scaledImg.Save(thumbPath, drw.Imaging.ImageFormat.Jpeg);
                }
                Response.AddHeader("Content-Disposition","file=\"" + filename + "\"");
                Response.ContentType = GetMIMEType(".jpg");
                Response.BinaryWrite(ms.ToArray());
            }
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion

        private string GetMIMEType(string dotExt /*string filepath*/)
        {
            RegistryPermission regPerm = new RegistryPermission(RegistryPermissionAccess.Read, "\\HKEY_CLASSES_ROOT");
            RegistryKey classesRoot = Registry.ClassesRoot;
            //FileInfo fi = new FileInfo(filepath);
            //string dotExt = fi.Extension.ToLower();
            RegistryKey typeKey = classesRoot.OpenSubKey(@"MIME\Database\Content Type");

            foreach(string keyname in typeKey.GetSubKeyNames())
            {
                RegistryKey curKey = classesRoot.OpenSubKey(@"MIME\Database\Content Type\" + keyname);
                if(Convert.ToString(curKey.GetValue("Extension")).ToLower() == dotExt)
                {
                    //Debug.WriteLine("Content type was " & keyname)
                    return keyname;
                }
            }

            return "";
        }

        private bool ImgAbort()
        {
            return false;
        }
    }


Jeg har lavet et namespace alias (drw), fordi der er navnesammenfald mellem Drawing.Image og WebControls.Image. Det ser således ud i using-sektionen:

using drw = System.Drawing;


Siden tager nogle querystring-parametre som styrer hvilken størrelse billedet skal skaleres i, men det kan du måske selv gennemskue hvordan du skal ændre. Desuden cacher den de små ikoner i thumbs-folderen, så de ikke skal genereres hver gang siden med ikoner vises.

Se om det er noget du kan bruge - jeg kunne :)
Avatar billede over-load Nybegynder
07. august 2005 - 17:28 #8
Mange tak, jeg vil lige se om jeg kan få det til at fungere :)
Avatar billede over-load Nybegynder
16. februar 2006 - 13:37 #9
hov, denne tråd havde jeg da glemt alt om. Undskyld softspot. Ligger du et svar?
Avatar billede softspot Forsker
16. februar 2006 - 13:43 #10
Ja, naturligvis :)
Avatar billede over-load Nybegynder
18. februar 2006 - 11:26 #11
undskylder mange gange, men efter jeg fik det til at virke, glemte jeg alt om posten :$
Avatar billede softspot Forsker
18. februar 2006 - 21:54 #12
Det skal du ikke undskylde - du vendte jo tilbage i sidste ende.

Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester