Har hyfsad kontroll på hur jag kan ladda up en bild och spara den på webbservern, men går det på något smidigt sätt att skala om den proportioneligt med ASP.net? Finns det någon klass som gör detta? Här är en funktion som jag använde en gång för detta. Dock i VB. Tack!Image upload
Använder helst c# men vb går bra med.Sv: Image upload
<code>
Private Function braBild(ByVal strBild As String) As Bitmap
'strBild är namnet på bilden
Try
' Orginalbilden
Dim objOrginal As System.Drawing.Image
objOrginal = objOrginal.FromFile(Server.MapPath("images\") & strBild)
Dim intMaxBredd As Integer = 70
Dim intMaxHojd As Integer = 80
Dim intNyaHojd, intNyBredd As Integer
' Kolla om den måste förminskas
If objOrginal.Width > intMaxBredd Or objOrginal.Height > intMaxHojd Then
If objOrginal.Width >= objOrginal.Height And objOrginal.Width > intMaxBredd Then
intNyBredd = intMaxBredd
intNyaHojd = (objOrginal.Height / objOrginal.Width) * intMaxBredd
Else
intNyaHojd = intMaxHojd
intNyBredd = (objOrginal.Width / objOrginal.Height) * intMaxHojd
End If
' Skapa bitmapp med rätt storlek
Dim objBitmap As Bitmap = New Bitmap(intNyBredd, intNyaHojd)
' Skapa graphic object
Dim objGraphics As Graphics = Graphics.FromImage(objBitmap)
objGraphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
objGraphics.DrawImage(objOrginal, 0, 0, intNyBredd, intNyaHojd)
objOrginal.Dispose()
' Spara den nya bilden
'objBitmap.Save(strBild, Imaging.ImageFormat.Jpeg)
'Response.Write("Ändrad bild: " & strBild & "<br>")
Return objBitmap
Else
objOrginal.Dispose()
End If
Catch
Response.Write("Det blev något fel!")
End Try
End Function
</code>Sv:Image upload
Slutresultatet blev såhär:
protected void saveUploadedImage(int inpNewsId, int maxWidth, int maxHeight)
{
try
{
// LADDAR UPP FILEN TILL SERVERN ////////////////////////////////////////////////
// Get a reference to PostedFile object
HttpPostedFile uploadedFile = inpFile.PostedFile;
// Get size of uploaded file
int intFileLen = uploadedFile.ContentLength;
// Allocate a buffer for reading of the file
byte[] bytBuffer = new byte[intFileLen];
// Read uploaded file from the Stream
uploadedFile.InputStream.Read(bytBuffer, 0, intFileLen);
string strPath = Request.MapPath("/images/start/" + inpNewsId + ".jpg");
string strNewPath = Request.MapPath("/images/start/" + inpNewsId + "_thumb.jpg");
// Skapa filen
FileStream saveFile = new FileStream(strPath, FileMode.Create);
// Skriv data till filen
saveFile.Write(bytBuffer, 0, bytBuffer.Length);
// Stäng filen
saveFile.Close();
// HANTERAR BILDINSTÄLLNINGAR ////////////////////////////////////////////////
int imgWidth;
int imgHeight;
System.Drawing.Image objImg = System.Drawing.Image.FromFile(strPath);
// Ställ in ny bredd och höjd på bilden
if (objImg.Width > objImg.Height)
{
imgWidth = maxWidth;
imgHeight = objImg.Height * maxWidth / objImg.Width;
}
else
{
imgWidth = objImg.Width * maxHeight / objImg.Height;
imgHeight = objImg.Height * maxWidth / objImg.Width;
}
System.Drawing.Image objThumb = new Bitmap(imgWidth, imgHeight, objImg.PixelFormat);
// Gör kvalitetsinställningar på bilden
Graphics objGraphic = Graphics.FromImage(objThumb);
objGraphic.CompositingQuality = CompositingQuality.HighQuality;
objGraphic.SmoothingMode = SmoothingMode.HighQuality;
objGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
// Ritar upp bildens yta
Rectangle objRect = new Rectangle(0, 0, imgWidth, imgHeight);
objGraphic.DrawImage(objImg, objRect);
// Sparar bilden
objThumb.Save(strNewPath, ImageFormat.Jpeg);
objImg.Dispose();
// TAR BORT TEMP-FILEN ////////////////////////////////////////////////////////
File.Delete(strPath);
}
catch (Exception ex)
{
debugLabel.Text = ex.Message;
}
}