2013-09-24 2 views
2

Привет, ребята Я изменяю размеры изображений на C# и сохраняю их как .png.Изменение размера изображения высокого качества для веб-сайта

public static Bitmap resize(int x, int y, Image p) 
{ 
    Bitmap Img = new Bitmap(x,y); 
    using (Graphics gr = Graphics.FromImage(Img)) 
    { 
     gr.SmoothingMode = SmoothingMode.HighQuality; 
     gr.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     gr.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     gr.DrawImage(p, new Rectangle(0, 0, x, y)); 
    } 
    return Img; 
} 

Проблема заключается в том, что, когда пользователь загружает изображение высокого качества, такие как изображения с высоких смартфонов, такими как Galaxys, Iphones и т.д. в размер_файле полученного уменьшенного изображения достаточно высок. Я построил таблицу размеров изображений размером и размером пикселей.

1) Img1 1280 * 666px => 458 kb 
2) Img1 300 * 399px => 221kb 
3) Img2 1280 * 1444px => 2.08mb 
4) Img2 300 * 451px => 327kb 

Я знаю, интерполяция и сглаживание набор высокого качества для целей примера и сохранения изображений в .png для сохранения прозрачности. Но какую настройку я должен изменить, чтобы получить изображение разумного качества и идеально подходит для HTML-страниц. Моя конечная цель заключается в компромиссе между качеством изображения и FileSize. Поэтому, пожалуйста, назовите меня ссылкой на демонстрацию Filsesize vs Quality для качества изображений с измененным размером, чтобы я мог сам сделать выбор.

+1

Вы действительно должны сохранять фотографии как .png? Зачем? – hyde

+0

@hyde Это могут быть фотографии или векторы, поэтому мне нужно сохранить прозрачность. –

+0

У вас всегда есть прозрачность, даже с фотографиями? – hyde

ответ

3

Есть один вариант, с которым вы можете играть, PixelFormat.

using (Bitmap bmp = new Bitmap(x, y, 
     System.Drawing.Imaging.PixelFormat.Format32bppArgb)) 
{ 
    using (Graphics gr = Graphics.FromImage(bmp)) 
    { 

     gr.SmoothingMode = SmoothingMode.HighQuality; 
     gr.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     gr.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     gr.DrawImage(src, new Rectangle(0, 0, x, y)); 
    } 
} 

Используйте 32-битный Argb, только если вам нужен альфа-канал (например, изображение прозрачное). Вы также можете запросить img.PixelFormat, чтобы узнать, содержит ли изображение даже альфа-канал! В этом случае вам не нужно сохранять его как PNG и можете использовать JPG, что приведет к уменьшению количества файлов!

Нормальный jpg обычно используется Format24bppRgb.

Смежные вопросы