Artiklar » .NET 2x » Ladda upp bild på server och förminska den

 
 

Ladda upp bild på server och förminska den

Författare: mactommy
Datum: den 20 februari 2009
Antal lästa: 3320
Ej stjärnmärkt

I min artikel "Ladda upp bild på servern med en upload-class" http://www.aspsidan.se/default.asp?page=readArticle&artId=644 så gjorde jag en enkel class för att ladda upp en bild på servern. Nu tänkte jag passa på och utveckla classen lite och skapa en enkel funktion som tar emot en bild och förminskar den till en valfri storlek, som vi bestämmer vid funktionsanropet.

Vi plockar fram "Upload.cs" klassen som skapades i förra artikeln. Vi behåller allt men lägger till en ny funktion, public static void ThumbPicture(FileUpload fileName, int maxFileSize, int outputHeight, int outputWidth) { }. För att använda funktionen så behöver vi ange bildnamnet, maximal storlek på filen, höjd och bredd vid anropet. Vi kan skala ner det hela och köra på maximal storlek på filen, höjd och bredd som fasta värden. Gör vi det så måste vi bygga en ny metod för varje bildstorlek och det kan man ju roa sig med eller bygga en som man kan ange vid varje unikt tillfälle.

Vi kommer återigen använda IF-satserna sedan tidgare för att kolla av att det är en bild och rätt filändelse m.m. med raderna Kod:
if (fileName.HasFile)
{
  if (fileName.PostedFile.ContentLength < maxFileSize)
  {
    if (CheckPictureType(fileName.FileName))
  {
    }
  }
}

Återigen så är vi i IF-satsen if (CheckPictureType(fileName.FileName)) { } där vi utför våran nedsparning och resize eftersom villkoren för att det är rätt filtyp och inte är över våran tillåtna nedladdningsbara maxstorlek.

Jag börjar med att lägga filnamnet i en variabel för att utnyttja det senare och spar filen på servern, Kod:
string serverFileName = HttpContext.Current.Server.MapPath(fileName.FileName);
fileName.SaveAs(serverFileName);


Sen hämtar jag upp bilden till en "System.Drawing.Image" och gör om den till en thumbail efter storleken som vi angav ovan vid anropet, Kod:
System.Drawing.Image fullImage = System.Drawing.Image.FromFile(serverFileName);
System.Drawing.Image thumbnail = fullImage.GetThumbnailImage(outputWidth, outputHeight, null, IntPtr.Zero);

Vi stänger ner "fullImage", "thumbnail" och sparar våran nya bild på samma ställe.

Ni bör nu ha en metod som ser ut så här, Kod:
public static void ThumbPicture(FileUpload fileName, int maxFileSize, int outputHeight, int outputWidth)
{
  if (fileName.HasFile)
  {
      if (fileName.PostedFile.ContentLength < maxFileSize)
    {
      if (CheckPicType(fileName.FileName))
      {
        string serverFileName  = HttpContext.Current.Server.MapPath(fileName.FileName);
        fileName.SaveAs(serverFileName );

        System.Drawing.Image fullImage = System.Drawing.Image.FromFile(serverFileName);
        System.Drawing.Image thumbnail = fullImage.GetThumbnailImage(outputWidth, outputHeight, null, IntPtr.Zero);
        fullImage.Dispose();
        thumbnail.Save(serverFileName);
        thumbnail.Dispose();
      }
    }
  }
}

Vi använder nu Upload.ThumbPicture(FileUpload1, 2100000, 70, 50); i CB-filen för att anropa den nya funktionen. För dom skarpögda så använder jag nu public static void och det innbär att jag inte returnerar någon text tillbaka. Men med hjälp av föregående artikel så borde ni kunna lägga till det själva eller titta på hur "UploadPicture"-funktionen är uppbyggd.

Som ni märker så har jag inte tagit någon hänsyn till att förminska bilden proportionerligt, funktionen gick ut på att minska till en viss storlek.

För att hjälpa er på traven lite med att bygga en egen thumbnail-funktion som tar bilden och förminskar ner den proportionerligt så tar ni bort "int outputHeight" och "int outputWidth" ifrån funktionsanropet. Dessa variablar sätter ni upp  i funktionen och använder "fullimage.Width" och "fullImage.Height" för att plocka fram höjd och bredd på original bilden och för att räkna ut förhållandet som behöver minskas ner i fullImage.GetThumbnailImage(outputWidth, outputHeight, null, IntPtr.Zero);.

Som sagt var så finns det flera möjligheter att förminska ner bilder och jag har valt en variant. Man kan läsa in bilden via en stream och förminska bilden först innan den sparas ner på servern. Men nu har jag valt att visa hur man kan göra vissa saker med små medel och utan att bråka med en massa tilläggskomponenter. Det blir inte mycket enklare än så här tycker jag...
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0469 sekunder att ladda sidan