Avatar billede n1 Nybegynder
22. januar 2004 - 14:52 Der er 26 kommentarer og
2 løsninger

upload og skalering af billeder

jeg skal bruge et script der kan uploade so kopier af et billed til en mappe, en hvor det bliver skaleret til en maks størrelse på 800 x 600 og en hvor det maks må være 100x100. jeg har fundet et script der måske kan bruges:
http://www.zitech.net/ZNSUP/aspx/skalering/
der må også gerne sættes begrænsning på størrelsen fx 100Kb og de må gerne læggei seperate mapper.
kan det lade sig gøre?
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 15:01 #1
ja ;-)
Avatar billede n1 Nybegynder
22. januar 2004 - 15:04 #2
er der nogen der kan lave et sådan script til mig???
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 15:15 #3
Jeg kan godt kigge på det i løbet af weekenden. Hvad koder du i?
Avatar billede n1 Nybegynder
22. januar 2004 - 15:17 #4
jeg kan finde ud af lidt asp, men jeg har også adgang til asp.net
Avatar billede burningice Nybegynder
22. januar 2004 - 15:18 #5
måske du kan bruge dette som inspiration?

private void SavePicture(byte[] data)
        {
            string baseDir = Configuration.BaseDir;
            string pictureDir = Configuration.PictureDir;

            Stream s = new MemoryStream(data);               
            Bitmap b = new Bitmap(s);
                   
            bool ligger = true;

            if (b.Height > b.Width)
            {
                ligger = false;
            }
                   
            Bitmap small;
            if (ligger)
            {
                small = ImageUtil.Resize(b, 100, 75, false);
            }
            else
            {
                small = ImageUtil.Resize(b, 75, 100, false);
            }

            small.Save(pictureDir +"\\"+ this.Id +"-small.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                   
            Bitmap big;
            if (ligger)
            {
                big = ImageUtil.Resize(b, 640, 480, false);
            }
            else
            {
                big = ImageUtil.Resize(b, 480, 640, false);
            }

            Bitmap logo = new Bitmap(System.Drawing.Image.FromFile(baseDir +"\\gfx\\pic-view-logo.gif"));
            Graphics g = Graphics.FromImage(big);
                   
            if (ligger)
            {
                g.FillRectangle(Brushes.Black, 439, 407, 196, 68);
                g.DrawImageUnscaled(logo, 439, 407);
            }
            else
            {
                g.FillRectangle(Brushes.Black, 279, 567, 196, 68);
                g.DrawImageUnscaled(logo, 279, 567);
            }
                   
            big.Save(pictureDir +"\\"+ this.Id +"-big.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                   
            b.Dispose();
            small.Dispose();
            big.Dispose();
            logo.Dispose();
        }

public class ImageUtil
    {
        public static Bitmap Resize(Bitmap b, int nWidth, int nHeight, bool bBilinear)
        {
            Bitmap bTemp = (Bitmap)b.Clone();
            b = new Bitmap(nWidth, nHeight, bTemp.PixelFormat);

            double nXFactor = (double)bTemp.Width/(double)nWidth;
            double nYFactor = (double)bTemp.Height/(double)nHeight;

            if (bBilinear)
            {
                double fraction_x, fraction_y, one_minus_x, one_minus_y;
                int ceil_x, ceil_y, floor_x, floor_y;
                Color c1 = new Color();
                Color c2 = new Color();
                Color c3 = new Color();
                Color c4 = new Color();
                byte red, green, blue;

                byte b1, b2;

                for (int x = 0; x < b.Width; ++x)
                    for (int y = 0; y < b.Height; ++y)
                    {
                        // Setup

                        floor_x = (int)Math.Floor(x * nXFactor);
                        floor_y = (int)Math.Floor(y * nYFactor);
                        ceil_x = floor_x + 1;
                        if (ceil_x >= bTemp.Width) ceil_x = floor_x;
                        ceil_y = floor_y + 1;
                        if (ceil_y >= bTemp.Height) ceil_y = floor_y;
                        fraction_x = x * nXFactor - floor_x;
                        fraction_y = y * nYFactor - floor_y;
                        one_minus_x = 1.0 - fraction_x;
                        one_minus_y = 1.0 - fraction_y;

                        c1 = bTemp.GetPixel(floor_x, floor_y);
                        c2 = bTemp.GetPixel(ceil_x, floor_y);
                        c3 = bTemp.GetPixel(floor_x, ceil_y);
                        c4 = bTemp.GetPixel(ceil_x, ceil_y);

                        // Blue
                        b1 = (byte)(one_minus_x * c1.B + fraction_x * c2.B);

                        b2 = (byte)(one_minus_x * c3.B + fraction_x * c4.B);
                       
                        blue = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                        // Green
                        b1 = (byte)(one_minus_x * c1.G + fraction_x * c2.G);

                        b2 = (byte)(one_minus_x * c3.G + fraction_x * c4.G);
                       
                        green = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                        // Red
                        b1 = (byte)(one_minus_x * c1.R + fraction_x * c2.R);

                        b2 = (byte)(one_minus_x * c3.R + fraction_x * c4.R);
                       
                        red = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                        b.SetPixel(x,y, System.Drawing.Color.FromArgb(255, red, green, blue));
                    }
            }
            else
            {
                for (int x = 0; x < b.Width; ++x)
                    for (int y = 0; y < b.Height; ++y)
                        b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),(int)(Math.Floor(y * nYFactor))));
            }

            return b;
        }
    }
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 15:22 #6
OK - jeg troede du ville have det i asp.net når du lagde det i denne gruppe. Hvis du ingen asp.net erfaring har er det måske en lidt for stor mundfuld, men jeg kan stadig godt give det et skud da jeg skal bruge det i en anden sammenhæng.
Avatar billede n1 Nybegynder
22. januar 2004 - 15:24 #7
kan det da laves bedre i asp?
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 15:28 #8
det tror jeg ikke
Avatar billede n1 Nybegynder
22. januar 2004 - 15:29 #9
men det kunne være fedt hvis der var nogen der havde et komplet script til dette :-)
Avatar billede odegaard Nybegynder
22. januar 2004 - 15:39 #10
Her er en mere eller mindre færdig løsning:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Drawing" %>
 
<script runat=server>

private void myUploadCode(Object sender, EventArgs e) {
    string strFileName;
   
    if(upload_file.PostedFile.FileName.IndexOf("\\") > 0) {
        strFileName = upload_file.PostedFile.FileName.Substring(upload_file.PostedFile.FileName.LastIndexOf("\\") + 1);
    } else { strFileName = "ukendt.fil"; }

    int MaxSize = 100;
    System.Drawing.Image image = new System.Drawing.Bitmap(upload_file.PostedFile.InputStream);

    System.Drawing.Bitmap bOrg = (System.Drawing.Bitmap)image;
    System.Drawing.Imaging.ImageFormat format = image.RawFormat;
               
    if(image.Width>MaxSize || image.Height>MaxSize) {
        Bitmap b = Resize(bOrg,MaxSize,MaxSize);
        b.Save(Server.MapPath("images/" + strFileName ),format);
    }
    else {
        bOrg.Save(Server.MapPath("images/" + strFileName ),format);

    }   

    Response.Write("<p>File <b><a href=\"images/" + strFileName + "\">" + strFileName + "</b> has been uploaded</b>");
}
private static Bitmap Resize(Bitmap b, int MaxHeight, int MaxWidth)
{
    int nWidth = b.Width;
    int nHeight = b.Height;
    if(nHeight>MaxHeight) {
        nWidth = (int)((((double)b.Width)/((double)b.Height))*((double)MaxHeight));       
        nHeight = MaxHeight;
    }
    if(nWidth>MaxWidth) {
        nWidth=MaxWidth;
        nHeight = (int)((((double)b.Height)/((double)b.Width))*((double)MaxWidth));
    }
    Bitmap bTemp = (Bitmap)b.Clone();
    b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
    double nXFactor = (double)bTemp.Width/(double)nWidth;
    double nYFactor = (double)bTemp.Height/(double)nHeight;
    for (int x = 0; x < b.Width; ++x)
        for (int y = 0; y < b.Height; ++y)
            b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),
                (int)(Math.Floor(y * nYFactor))));
    return b;
}

</script>

<html><body>

<form enctype="multipart/form-data" runat="server">


<asp:PlaceHolder id="phEdit" runat="server">
    <p>Select image to upload:</p>
    <input id="upload_file" type="file" runat="server" /><br><br>
    <asp:button Text="Upload File" onClick="myUploadCode" runat="server" />
</asp:PlaceHolder>
</form>

</body></html>
Avatar billede n1 Nybegynder
22. januar 2004 - 15:42 #11
fedt, så mangler den bare at lave det store billed :-)
Avatar billede n1 Nybegynder
22. januar 2004 - 15:45 #12
ken det ikke også lave det således at den omdøber filnavnet hvis det allerrede eksisterer i image mappen?
Avatar billede ponyboye Nybegynder
22. januar 2004 - 15:48 #13
kan man lave den så man vælger hvad størelse det skal uploades i og hvordan billedet til at se ud efter upload? (bliver det dårligt)
Avatar billede odegaard Nybegynder
22. januar 2004 - 15:51 #14
Og sorry, jeg havde ikke set at du ville have originalen også.
Du gemmer den med:
upload_file.PostedFile.SaveAs(Server.MapPath("images/strFileName"))

Det lille billede skal du så nok gemme i fx. "/thumbnails/" i stedet for "images".
Avatar billede odegaard Nybegynder
22. januar 2004 - 15:51 #15
Du kan jo lave en tekstbox hvor man vælge størrelse, og så sætte 'MaxSize' til denne størrelse.
Avatar billede ponyboye Nybegynder
22. januar 2004 - 16:17 #16
odegaard >>>> Der er ikke noget i det man skal være opmærksom på? Når man har indsat en tekstbox eller drop down box i uploadnings formularen, hvad og med hvad skal erstattes?
Avatar billede ponyboye Nybegynder
22. januar 2004 - 16:17 #17
odegaard >>>> Jeg opretter lige et spørgsmål til dette.
Avatar billede skarvenneverdies Nybegynder
22. januar 2004 - 16:21 #18
Lytter med...
Avatar billede n1 Nybegynder
22. januar 2004 - 16:43 #19
hvordan skal det se ud hvis den også skal kopiere originalen, som makas må fylde 100Kb.
så må der også gerne komme en besked hvis filen allerrede eksisterer!
Avatar billede ponyboye Nybegynder
22. januar 2004 - 16:49 #20
Jeg har oprette et spørgsmål med lidt flere point for hjælp til at lave drop down box til at bestemme størelse af billedet ved upload og til at lave så den omdøber filnavnet på billedet og uploader med aspSmartUpload.

http://www.eksperten.dk/spm/455501
Avatar billede odegaard Nybegynder
22. januar 2004 - 16:49 #21
if(upload_file.PostedFile.ContentLength) > (100*1024)) {
  [Fil er for stor]
}
if File.Exist(Server.MapPath("images/strFileName")) {
  [Fil eksisterer]
}
Avatar billede n1 Nybegynder
22. januar 2004 - 16:57 #22
jeg kna ikke helt få det til at virke! kan du ikke prøve at indsætte det i det ovenstående script... tak.
og helst med at den også uploader orignal filen hvis den ikke er over 100Kb. så er jeg glad!
Avatar billede odegaard Nybegynder
22. januar 2004 - 17:03 #23
Hvis du slet ingen erfaring har med ASP.NET, så var det måske en idé først at få det, inden du kaster dig ud i det her? De ting du spørger om nu, er MEGET elementære.
Avatar billede n1 Nybegynder
22. januar 2004 - 17:06 #24
ja... det kunne godt være, men jeg har først lige fået webhotel med asp.net.
Avatar billede n1 Nybegynder
22. januar 2004 - 17:39 #25
jeg kan virkelig ikke få den til at lave to kopier at billedet, kan du ikke sætte scriptet sammen for mig???? plz.....
Avatar billede odegaard Nybegynder
22. januar 2004 - 21:16 #26
Prøv den her (kræver en undermappe '\images' og en '\thumbs')
Tjekker for om det er et billede, om det er under 100kb, og om filen allerede eksisterer.

----------------------upload_image.aspx--------------------


<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Drawing" %>
 
<script runat=server>

private void myUploadCode(Object sender, EventArgs e) {
    string strFileName;
    if(upload_file.PostedFile.ContentLength < (100*1024)) { //Er fil over 100kb?

            if(upload_file.PostedFile.FileName.IndexOf("\\") > 0) {
                strFileName = upload_file.PostedFile.FileName.Substring(upload_file.PostedFile.FileName.LastIndexOf("\\") + 1);
            } else { strFileName = "ukendt.fil"; }

            if(!File.Exists(Server.MapPath("images/" + strFileName))) {

                    int MaxSize = 100;
                    try
                    {
                            System.Drawing.Image image = new System.Drawing.Bitmap(upload_file.PostedFile.InputStream);
                            upload_file.PostedFile.SaveAs(Server.MapPath("images/" + strFileName));
                            System.Drawing.Bitmap bOrg = (System.Drawing.Bitmap)image;
                            System.Drawing.Imaging.ImageFormat format = image.RawFormat;
                 
                            if(image.Width>MaxSize || image.Height>MaxSize) {
                                Bitmap b = Resize(bOrg,MaxSize,MaxSize);
                                b.Save(Server.MapPath("thumbs/" + strFileName ),format);
                            }
                            else
                            { //Gem original da billede allerede er mindre end 100px
                                    upload_file.PostedFile.SaveAs(Server.MapPath("thumbs/" + strFileName));
                            }
                            Response.Write("<p>File <b><a href=\"images/" + strFileName + "\">" + strFileName + "</b> has been uploaded</b>");
                            Response.Write("<a href=\"images/" + strFileName + "\"><img src=\"thumbs/" + strFileName + "\">");
                    }
                    catch
                    {
                        Response.Write("Der skete en fejl ved processering af billedet");       
                    }
          }
          else
          {
                Response.Write("Filnavn eksisterer allerede");
          }

        }
        else {
                //Fil var for stor
                Response.Write("Billedet er over 100kb");
        }
}
private static Bitmap Resize(Bitmap b, int MaxHeight, int MaxWidth)
{
        int nWidth = b.Width;
        int nHeight = b.Height;
        if(nHeight>MaxHeight) {
                nWidth = (int)((((double)b.Width)/((double)b.Height))*((double)MaxHeight));               
                nHeight = MaxHeight;
        }
        if(nWidth>MaxWidth) {
                nWidth=MaxWidth;
                nHeight = (int)((((double)b.Height)/((double)b.Width))*((double)MaxWidth));
        }
        Bitmap bTemp = (Bitmap)b.Clone();
        b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
        double nXFactor = (double)bTemp.Width/(double)nWidth;
        double nYFactor = (double)bTemp.Height/(double)nHeight;
        for (int x = 0; x < b.Width; ++x)
                for (int y = 0; y < b.Height; ++y)
                        b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),
                                (int)(Math.Floor(y * nYFactor))));
        return b;
}

</script>

<html><body>

<form enctype="multipart/form-data" runat="server">


<asp:PlaceHolder id="phEdit" runat="server">
    <p>Select image to upload:</p>
    <input id="upload_file" type="file" runat="server" /><br><br>
    <asp:button Text="Upload File" onClick="myUploadCode" runat="server" />
</asp:PlaceHolder>
</form>

</body></html>
Avatar billede n1 Nybegynder
22. januar 2004 - 22:23 #27
takker!!!
Avatar billede n1 Nybegynder
10. maj 2004 - 20:44 #28
jeg skal egentligt bruge et script som minder lidt om det, det er bare mere simpelt, i kan kikke her: http://www.eksperten.dk/spm/497328
det kunne være fedt, jeg har lidt svært ved selv at finde ud af det!
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