Publikoval Michal Kočí dňa 11.9.2004 o 17:31 v kategórii .Net
Včera som potreboval web stránku, ktorá by mi generovala thumbnail JPEG obrázku.
Predstavoval som si to tak, že zavolám ASPX stránku, parametrom jej predám nejaké informácie o obrázku ktorého thumbnail potrebujem a ona mi ho vygeneruje a vráti. Nakoniec som splodil nasledovnú metódu, ktorú volám rovno z metódy Page_Load:
private void GetImageThumbnail(String fileName) { // Vytvorime povodny obrazok System.Drawing.Image imgFull = System.Drawing.Image.FromFile(fileName); // Nechame si vygenerovat thumbnail System.Drawing.Image imgThumb = imgFull.GetThumbnailImage(imgFull.Width / 4, imgFull.Height / 4, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailImageAbort), IntPtr.Zero); // Thumbnail ulozime do streamu MemoryStream msThumb = new MemoryStream(); imgThumb.Save(msThumb, System.Drawing.Imaging.ImageFormat.Jpeg); // Zo streamu spravime byteove pole byte[] bThumb = new byte[msThumb.Length]; msThumb.Position = 0; msThumb.Read(bThumb, 0, (int) msThumb.Length); // Pole zapiseme do odpovedi dotazu Response.ClearContent(); Response.ContentType = "image/jpeg"; Response.BinaryWrite(bThumb); }
Metóda GetThumbnailImage objektu triedy Image (pozor, jedná sa o Image z namespace System.Drawing) preberá ako tretí parameter delegáta, ktorí sa v GDI+ 1.0 nepoužíva (tak praví nápoveda). Napriek tomu musí byť. Jeho návratová hodnota určuje, či sa má prerušiť generovanie thumbnailu, takže ju necháme stále vracať hodnotu false. Vyzerá teda nasledovne:
private bool ThumbnailImageAbort() { return false; }
Ja som potreboval, aby mi moja metóda GetImageThumbnail generovala JPEG thumbnail so štvrtinovou veľkosťou pôvodného JPEGu. Malou úporavou metódy sa však dá nastaviť aj fixná veľkosť generovaných obrázkov, takisto sa dá vybrať iný formát obrázku, napríklad BMP, GIF. Každému podľa jeho gusta...
Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.