Изменение размера gif изображения приводит к потере качества - PullRequest
2 голосов
/ 11 ноября 2011

Я использую Graphics.DrawImage() для изменения размера изображений в моем приложении ASP.NET.

Это нормально работает со всеми форматами изображений, кроме gif.

Вот мое исходное изображение:

enter image description here

Когда я изменяю размер до 300px, он возвращает:

enter image description here

Код, который я использую:

 Dim postedFile as new Bitmap("flower.gif")
 Dim bmpOut As System.Drawing.Bitmap
 Dim Format As ImageFormat = postedFile.RawFormat
 bmpOut = New Bitmap(width, height)
 Dim g As Graphics = Graphics.FromImage(bmpOut)
 g.InterpolationMode = InterpolationMode.High
 g.DrawImage(postedFile, 0, 0, width, height)
 postedFile.Dispose()
 Return bmpOut
 bmpOut.Dispose()

Я также пытался использовать все доступные InterpolationMode, включая InterpolationMode.HighQualityBicubic, но качество изображения все еще такое же низкое.

Почему это происходит, икак я могу предотвратить потерю качества изображения?

Ответы [ 3 ]

4 голосов
/ 13 ноября 2011

Проблема не в коде изменения размера, который вы разместили. Я бежал, используя большое изображение, которое вы разместили, и результат выглядит великолепно. Ваша проблема возникает, когда вы сохраняете только что созданное изображение с 24 битами на пиксель в новый GIF - с 8bpp. У вас есть два основных варианта:

  1. Реализация кода для создания оптимизированной цветовой палитры для нового GIF (или просто используйте палитру из оригинального изображения)
  2. Вместо этого сохраните в .png - это совершенно превосходящий формат
0 голосов
/ 11 ноября 2011

Речь идет не об интерполяции, а о том, что ColorPalette не установлен для целевого изображения. Вы должны квантовать. Смотрите пример на http://glennjones.net/2005/10/high-quality-dynamically-resized-images-with-dot-net/

0 голосов
/ 11 ноября 2011

Если вы сохраняете изображение с измененным размером как .gif, я не вижу причин, почему это не может произойти в сохраненном .gif.Размер файла .gif ограничен 256 цветами (если не будут сделаны некоторые хаки), а размер вашего изображения после всех манипуляций может превышать 256. Кроме того, я не удивлюсь, обнаружив, что какую бы процедуру вы не использовали для преобразования изображений.gif's не очень заботится о качестве.

...