Avatar billede gadebarnet Nybegynder
12. april 2005 - 21:48 Der er 10 kommentarer og
2 løsninger

image forminsker

Jeg har fået hjælp til denne fil, men jeg syntes den er langsom...

Er der nogle der har nogle optimerings mulighedder eller bare en anden script fil... Man skal kunne det samme.

---
<%@ Page Language="C#" %>
<%@ import Namespace="System" %>
<%@ import Namespace="System.Collections" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<script runat="server">

    public enum SizeConversionType
    {
       
        Type0,
        Type1,
        Type2,
    Type3,
    Type4,
    Type5,
    Type6,
    Type7,
    Type8,
    Type9
    }
   
    private const string IMAGE_FOLDER = "";
   
    protected SizeConversionType ConversionType
    {
        get
        {
            object o = Request.QueryString["SizeConversionType"];
            try
            {
                return (SizeConversionType)Enum.Parse(typeof(SizeConversionType), o.ToString(), true);
            }
            catch
            {
                return SizeConversionType.Type1;
            }
        }
    }
   
    protected string ImageFileName
    {
        get
        {
            return (object)Request.QueryString["ImageFileName"] != null ? Request.QueryString["ImageFileName"] : null;
        }
    }
   
    protected void Page_Load(object sender, System.EventArgs e)
    {
        string path = Server.MapPath(IMAGE_FOLDER + ImageFileName);
        System.Drawing.Image orgImage = System.Drawing.Image.FromFile(path);
   
        int orgWidth = orgImage.Width;
        int orgHeight = orgImage.Height;
   
        orgImage.Dispose();
   
        int newWidht = 0;
        int newHeigth = 0;
   
     
        switch(ConversionType)
        {
 
            case SizeConversionType.Type0 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                    newWidht = 94;
                    newHeigth = 128;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 128;
                    newHeigth = 94;
                }
                else
                {
                    newWidht = 128;
                    newHeigth = 94;
                }
                break;
            case SizeConversionType.Type1 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                    newWidht = 309;
                    newHeigth = 412;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 550;
                    newHeigth = 412;
                }
                else
                {
                    newWidht = 550;
                    newHeigth = 412;
                }
                break;
           
        case SizeConversionType.Type2 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                newWidht = 62;
                    newHeigth = 82;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 80;
                    newHeigth = 60;
                }
                else
                {
                    newWidht = 80;
                    newHeigth =60;
                }
                break;
    case SizeConversionType.Type3 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                newWidht = 48;
                    newHeigth = 60;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 60;
                    newHeigth = 46;
                }
                else
                {
                    newWidht = 60;
                    newHeigth =46;
                }
                break;
    case SizeConversionType.Type4 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                newWidht = 88;
                    newHeigth = 88;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 88;
                    newHeigth = 88;
                }
                else
                {
                    newWidht = 88;
                    newHeigth =88;
                }
                break;
    case SizeConversionType.Type5 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                newWidht = 125;
                    newHeigth = 125;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 125;
                    newHeigth = 125;
                }
                else
                {
                    newWidht = 125;
                    newHeigth =125;
                }
                break;
    case SizeConversionType.Type6 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                    newWidht = 101;
                    newHeigth = 76;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 101;
                    newHeigth = 76;
                }
                else
                {
                    newWidht = 101;
                    newHeigth =76;
                }
                break;
    case SizeConversionType.Type7 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                newWidht = 74;
                    newHeigth = 74;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 74;
                    newHeigth = 74;
                }
                else
                {
                    newWidht = 74;
                    newHeigth =74;
                }
                break;
    case SizeConversionType.Type8 :
                if(orgWidth == 480 && orgHeight == 640)
                {
                newWidht = 35;
                    newHeigth = 35;
                }
                else if(orgWidth == 640 && orgHeight == 480)
                {
                    newWidht = 35;
                    newHeigth = 35;
                }
                else
                {
                    newWidht = 35;
                    newHeigth =35;
                }
                break;
    case SizeConversionType.Type9 :
                if(orgWidth < 400 )
                {
                newWidht = 150;
                    newHeigth = 200;
                }
                else if(orgHeight < 400)
                {
                  newWidht = 150;
                    newHeigth = 200;
                }
                else
                {
                    newWidht = 150;
                    newHeigth = 200;
                }
                break;
        }
   
        System.Drawing.Image image = ImageResizer.RezizeImage(path, newWidht, newHeigth);
        Response.ContentType = "image/jpeg";
        image.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
        image.Dispose();
    }
   
    public class ImageResizer
    {
        public static System.Drawing.Bitmap RezizeImage(string filePath, int width, int height)
        {
            System.Drawing.Bitmap bmpOut = null;
   
            try
            {
                System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(filePath);
   
                bmpOut = new System.Drawing.Bitmap(width, height);
                System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmpOut);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                g.FillRectangle(System.Drawing.Brushes.White, 0, 0, width, height);
                g.DrawImage(bmp, 0, 0, width, height);
                bmp.Dispose();
            }
            catch
            {
 
return null;
            }
   
            return bmpOut;
        }
    }

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <!-- Insert content here -->
    </form>
</body>
</html>
---
Avatar billede burningice Nybegynder
12. april 2005 - 21:55 #1
langsomt... hvad snakker vi om her? 1-2 sekunder eller 10-20 sekunder?
Avatar billede snepnet Nybegynder
12. april 2005 - 22:03 #2
ja - det ville være fint hvis du havde et eller andet til os omkring hvad der tog tid. umiddelbart tror jeg ikke du har har så meget at hente på koden.... tiden det tager at transportere billedet overstiger fomentlig tiden det tager at genere det med en faktor.

på hvilket måde bruger du det ? - viser du en liste over billeder som rezises ?

skriv lige tilbage hvor lang tid det tager at eksekvere... spørg hvis du er i tvivl om hvordan du timer det.

mvh
Avatar billede gadebarnet Nybegynder
12. april 2005 - 22:41 #3
Tjaaa, jeg ved ikke rigtig hvad jeg skal sige... Den er bare langsom...

Nogle af de billeder den bearbejder er 500-1.2 K store, så det kan jo nok have noget med af gøre...
Avatar billede snepnet Nybegynder
12. april 2005 - 22:57 #4
går ud fra at du mener at de kan være på over en megabyte.... og det er nu ikke fordi du skal finde på noget specielt at sige, men tag tid på tingene o:)

lav sådan en her i page_load :
Trace.Write("ImageResizer_begin");

og så ligen efter denne linie (også i page_load) :
System.Drawing.Image image = ImageResizer.RezizeImage(path, newWidht, newHeigth);

Sætter du en :
Trace.Write("ImageResizer_end");

I din web.config sørger du for at have dette stående :

    <trace
        enabled="truw"
        requestLimit="10"
        pageOutput="true"
        traceMode="SortByTime"
        localOnly="true"
    />

så vil du nederst på siden får et trace ud - og du vil kunne se hvor lang tid du bruger på at generere et billede med en anden størrelse.

mvh
Avatar billede gadebarnet Nybegynder
12. april 2005 - 23:02 #5
Jeg benytter aspx scriptet fra mine eksisterende asp filer, så jeg har IKKE web.config
Avatar billede snepnet Nybegynder
12. april 2005 - 23:21 #6
Hmmm... Nu er der jo ikke nogle der forhindrer dig i at have en konfigurationsfil bare fordi du har et par asp-sider liggende under dit web.

brug den her :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>   
  <system.web>
    <trace
        enabled="true"
        requestLimit="10"
        pageOutput="false"
        traceMode="SortByTime"
        localOnly="true"
    />
</system.web>
</configuration>

Den skal ligge i roden, og hedde web.config

Det er formegentlig ikke den rutine du har vist her der tager tid, men prøv at sætte traces ind som beskrevet tidligere... Kør applikationen og gå så til :

http://<host>/<web>/Trace.axd

mvh
Avatar billede burningice Nybegynder
12. april 2005 - 23:24 #7
man kan også slå trace til på den enkelte side

<%@ Page Trace="true" %>
Avatar billede snepnet Nybegynder
12. april 2005 - 23:28 #8
tror ikke det vil være den fede cyberfessor .... det er sådan en fyr her :
Response.ContentType = image/jpeg";
image.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);

Såhh... jeg tror heller det første jeg skrev om trace ville give det store :o(

mvh
Avatar billede burningice Nybegynder
13. april 2005 - 08:55 #9
hm... nej, det har du da ret i... så må man have koden over i et konsol-program ell. lign. for at lave lidt profiling på den
Avatar billede gadebarnet Nybegynder
13. april 2005 - 09:57 #10
Sorry guy's

Min fejl...

Jeg havde brugt en gammel sql sætning i stedet for min nye...

Det var den der sløvede det hele...

Kan i ikke lige smide svar begge 2 så kan i dele.
Avatar billede burningice Nybegynder
13. april 2005 - 10:20 #11
:)
Avatar billede snepnet Nybegynder
13. april 2005 - 10:57 #12
:)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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