Asp.net намали размера на изображението в kb

Публикувах тази друга тема, получих някои нежни отговори, но въпреки че отговорите разрешиха качествената страна на въпроса, те създадоха друг проблем с размера на изображението в kb. Качество на преоразмеряване на Asp.net изображение

Тук е въпросът.

Имам 2MB изображение, което искам да намаля до 480px ширина.

Използвах три различни начина за преоразмеряване:

1) На Fileupload стартира този код:

System.IO.Stream st = FileUploadPost.PostedFile.InputStream;
myImage = System.Drawing.Image.FromStream(st);
thumb = myImage.GetThumbnailImage(newWidth, newHeight, null, System.IntPtr.Zero);
thumb.Save(myPath);

Предимства: Размерът в kb става малък (около 80Kb).

Недостатък: Визуалното качество е ужасно

2) На Fileupload стартира този код (решение, предоставено в споменатата публикация):

 Bitmap newImg = new Bitmap(newWidth, newHeight,    System.Drawing.Imaging.PixelFormat.Format24bppRgb);                            
 Graphics newGraphic = Graphics.FromImage(newImg);
 newGraphic.DrawImage(myImage, 0, 0, newWidth, newHeight);
 newGraphic.Dispose();
 newImg.Save(myPath); 

Предимства: Визуалното качество е добро

Недостатък: Размерът продължава да е много голям (около 400kb)

3) Използвах софтуера Windows Paint и „ръчно“ намалих изображението до 480px ширина

Предимства: Предимства както на 1), така и на 2) -> Визуалното качество е добро и размерът е намален до около 80kb

Въпросът е:

Какъв е кодът, който възпроизвежда поведението на елемент 3 (добро визуално качество и по-малък размер в kb)?

Благодаря


person user2974961    schedule 27.01.2014    source източник
comment
Опитайте imageresizing.net   -  person luke2012    schedule 28.01.2014


Отговори (1)


Опитайте едно от тези:

 Bitmap newImg = new Bitmap(newWidth, newHeight, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);                            
 Graphics newGraphic = Graphics.FromImage(newImg);
 newGraphic.DrawImage(myImage, 0, 0, newWidth, newHeight);
 newGraphic.Dispose();
 newImg.Save(myPath); 

or

 Bitmap newImg = new Bitmap(newWidth, newHeight, System.Drawing.Imaging.PixelFormat.Format16bppArgb1555);                            
 Graphics newGraphic = Graphics.FromImage(newImg);
 newGraphic.DrawImage(myImage, 0, 0, newWidth, newHeight);
 newGraphic.Dispose();
 newImg.Save(myPath); 

or

 Bitmap newImg = new Bitmap(newWidth, newHeight, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);                            
 Graphics newGraphic = Graphics.FromImage(newImg);
 newGraphic.DrawImage(myImage, 0, 0, newWidth, newHeight);
 newGraphic.Dispose();
 newImg.Save(myPath); 

Това би трябвало само леко да влоши качеството и да намали драстично размера, но не съм сигурен кой би бил по-добър.

Ето цял куп други опции, които също да опитате:

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.pixelformat%28v=vs.110%29.aspx

person Nefariis    schedule 28.01.2014
comment
Ей човек! това наистина проработи! много благодаря!!! първата ви опция по-горе намали изображението до 193 kb (наполовина от размера, който получавах преди) и визуално казано качеството остава същото. Получих грешка за опции 2 и 3. Ще опитам и другите от вашата връзка. Благодаря отново! - person user2974961; 28.01.2014