eliminare il dithering dalle gif salvate in vb.net
Di recente mi è capitato di dover scrivere un testo al volo su delle immagini di un mio sito a scopo di copyright.
Per le jpeg non ho avuto particolari problemi; caricavo l’immagine, convertivo in bitmap e ci lavoravo sopra di grafica e testo con il system.Drawing.Graphics.
Il problema si presenta però con le gif, il salvataggio le rovina in maniera disastrosa, applicando il dithering all’immagine. Leggendo qua e là ho compreso che era un problema di palette e che tramite le GDI+ si poteva ovviare al problema.
Ho quindi trovato un utile riferimento su msdn http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/colorquant.asp
nella cui pagina vi è un progetto di esempio da scaricare in C#.
L’ho quindi adattato in vb.net, importando la dll ImageManipulation.dll nel mio progetto e usando il seguente codice DOPO aver effettuato tutte le manipolazioni grafiche sull’immagine, prima quindi di inviare l’outputstream all’utente.
In grassetto il codice utile al corretto adattamento dei colori.
Imports System
Imports System.Web
Imports System.Drawing.Imaging
Imports System.Drawing
Imports ImageManipulation
Dim g As System.Drawing.Image = System.Drawing.Image.FromFile(thepath, True)
Dim thisFormat = g.RawFormat
Dim hh As Integer = g.Height
Dim ww As Integer = g.Width
Dim imgOutput As New Bitmap(g, ww, hh)
Dim b As Graphics = Graphics.FromImage(imgOutput)
Dim blackbrush As New SolidBrush(Color.Black)
b.DrawString("testo da scrivere", New Font("arial", 7, FontStyle.Bold), blackbrush, New PointF(6, hh - 25))
If thisFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif) Then
Response.ContentType = "image/gif"
'Questo è il codice aggiunto per eliminare il dithering dalle gif.
Dim quantizer As New OctreeQuantizer(255, 8 )
imgOutput = quantizer.Quantize(imgOutput)
'*********************************************
Else
Response.ContentType = "image/jpeg"
End If
imgOutput.Save(Response.OutputStream, thisFormat)
b.Dispose()
g.Dispose()
imgOutput.Dispose()
Il risultato è davvero ottimo, chissà perchè microsoft non ha pensato di implementare questa feature direttamente nel framework?
Giuseppe Liguori
liguori | seo napoli | seo roma | seo | liguori
