Polygen per il web – Generatore di testo casuale.

Polygen è un software gratuito, che genera testo casuale basato su delle grammatiche programmabili con un metalinguaggio molto facile da apprendere. 

Nel loro sito (tutto in italiano) è possibile scaricare molte grammatiche già pronte come ad esempio l’oroscopo o il divertentissimo Lettere a riviste per teenager.
I testi prodotti da polygen sono pseudo casuali e con una buona semantica, utilissimi per dei TEST, per riempire pagine web vuote e per dare quindi qualcosa in pasto ai motori di ricerca e che che non dia troppo nell’occhio anche ad quality rater rispetto al classico testo casuale realizzato con le markov chain.

Polygen però viene fornito in formato eseguibile e non è solitamente utilizzabile nelle pagine web, per cui ho pensato di integrare l’eseguibile di polygen, con codice php o asp.net.

Purtroppo l’unico requisito scomodo è che per utilizzare questo codice bisogna avere permessi di esecuzione sul file, quindi fruibile solo su un server vostro e non sui classici hosting gratuiti.

Procedura:

-scaricate l’eseguibile di polygen (download per linux o per windows)   ed il file per la grammatica scelta o realizzata da voi in formato .grm.

-Copiate l’eseguibile di polygen ad esempio nella stessa cartella della pagina php o .aspx (se è sistema microsoft dovete copiare anche cygwin1.dll), copiate anche la grammatica di vostro interesse.

Di seguito le due versioni:

Codice PHP:

< ?php
$grammatica="oroscopo.grm"; //qui mettete il nome del file di grammatica da voi scelto
echo system_o(realpath("polygen.exe") . " " . $grammatica); //eliminare ".exe" nel caso di sistema linux

   function system_o($cmd)
   {
       global $ret;
       exec("$cmd", $f);
       foreach($f as $output) {
           //$output = htmlentities($output); //decommentate questa al posto della successiva se volete strippare via tutto l'eventuale codice html
           $ret .= "$output\n";
       }
       return $ret;
   }
?>

Codice ASP.NET

   < %
   Dim p As System.Diagnostics.Process = New System.Diagnostics.Process
 'instanzio il processo eliminando la shell dos e redirezionando l'output.
        With p.StartInfo
            .FileName = Server.MapPath(".") + "\" + "polygen.exe"
            .Arguments = Server.MapPath(".") + "\" + "oroscopo.grm"
            .CreateNoWindow = True
            .RedirectStandardInput = True
            .RedirectStandardOutput = True
            .RedirectStandardError = True
            .UseShellExecute = False
        End With
        'lancio il processo
        p.Start()
        Dim StdOut As System.IO.StreamReader = p.StandardOutput
        Dim sTemp As String

        sTemp += StdOut.ReadToEnd

 'decommentare solo se volete leggere anche lo stderr
        'Dim StdErr As System.IO.StreamReader = p.StandardError
        'sTemp += StdErr.ReadToEnd

 'stampa a video del testo generato
        Response.Write(sTemp)
        %>

Se avete problemi o domande, contattatemi pure.

Giuseppe Liguori


liguori | seo napoli | seo roma | seo | liguori

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