V Vinnaren Medlem sedan sep. 2005 833 inlägg Frågan 16 dec. 2007 22:54 #1 Håller på med en bilduppladdning, där bilden som laddas upp ska vara/bli 780px bred.
Har följande hittills:
String extension = Path.GetExtension(fuBanner.FileName).ToLower();
String filename = Guid.NewGuid() + extension;
int height, width;
fuBanner.SaveAs(Server.MapPath("upload/temp") + filename);
System.Drawing.Image img = Bitmap.FromStream(fuBanner.PostedFile.InputStream);
height = img.Height;
width = img.Width;
Hur gör jag om bilden till 780px?
Tacksam för all hjälp :stud
C Coercri Medlem sedan feb. 2000 93 inlägg Att söka på webforum hjälper ibland. http://www.webforum.nu/showthread.php?t=145438 kan nog hjälpa dig.
Det du måste göra är att läsa in filen i minnet och arbeta med den i en memorystream för att sedan skriva den till din uploadpath.
Själv föredrar jag att sktiva filer till databasen för att det ger mig mer kontroll och mindre strul med behörigheter i filsystemet.
G Gladh Medlem sedan maj 2001 2 812 inlägg
coercri skrev:
Själv föredrar jag att sktiva filer till databasen för att det ger mig mer kontroll och mindre strul med behörigheter i filsystemet.
Om man väljer detta alternativ (som har sina fördelar/nackdelar) så måste man se till så att bilderna läggs i en lokal cache när de är omvandlade från sin dataström till ett bildobjekt. Eftersom prestandan blir rejält lidande när man använder GDI+ för att skapa bilder från en dataström.
- M
V Vinnaren Medlem sedan sep. 2005 833 inlägg ok, men löste det med:
img = img.GetThumbnailImage(780, height, null, System.IntPtr.Zero);
Kanske inte det bästa sättet men det var smidigt :i
Eller kanske finns nott bättre sätt :q
V Vinnaren Medlem sedan sep. 2005 833 inlägg får ett litet felmeddelande när jag kör uppladdningen:
An object reference is required for the nonstatic field, method, or property 'System.Web.UI.Page.Server.get'
på:
fu.SaveAs(Server.MapPath("~/upload/temp/") + filename);
Hur löser man detta?
Zaiman Medlem sedan dec. 2001 4 239 inlägg Saxat från internet:
public static Image FixedSize(Image imgPhoto, int Width, int Height)
{
int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;
int sourceX = 0;
int sourceY = 0;
int destX = 0;
int destY = 0;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)Width / (float)sourceWidth);
nPercentH = ((float)Height / (float)sourceHeight);
//if we have to pad the height pad both the top and the bottom
//with the difference between the scaled height and the desired height
if (nPercentH < nPercentW)
{
nPercent = nPercentH;
destX = (int)((Width - (sourceWidth * nPercent)) / 2);
}
else
{
nPercent = nPercentW;
destY = (int)((Height - (sourceHeight * nPercent)) / 2);
}
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap bmPhoto = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.Clear(Color.White);
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
grPhoto.DrawImage(imgPhoto,
new Rectangle(destX, destY, destWidth, destHeight),
new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
GraphicsUnit.Pixel);
grPhoto.Dispose();
return bmPhoto;
}