2009-04-02 18 views
10

Ho bisogno di aggiungere del testo a un file immagine. Ho bisogno di leggere un file immagine (jpg, png, gif) e ho bisogno di aggiungere un testo di riga ad esso.Aggiunta di testo a un file immagine

+0

Guardando dentro. Il problema è che quando apri il file, è bloccato, quindi non puoi salvare sullo stesso file. Tornerai da te ... –

risposta

0

È possibile farlo utilizzando l'oggetto Graphics in C#. È possibile ottenere un oggetto grafico dall'immagine (image.CreateGraphics() - o qualcosa di simile come ricordo) e utilizzare alcuni dei metodi incorporati per aggiungere testo come: Graphycs.DrawString() o altri metodi correlati.

20

Bene in GDI + si legge nel file utilizzando una classe Image e quindi si utilizza la classe Graphics per aggiungere del testo. Qualcosa di simile:

Image image = Image.FromFile(@"c:\somepic.gif"); //or .jpg, etc... 
    Graphics graphics = Graphics.FromImage(image); 
    graphics.DrawString("Hello", this.Font, Brushes.Black, 0, 0); 

Se si desidera salvare il file su quello vecchio, il codice deve cambiare un po 'come il metodo Image.FromFile() blocca il file finché non è smaltito. Quello che segue è ciò che mi si avvicinò con:

FileStream fs = new FileStream(@"c:\somepic.gif", FileMode.Open, FileAccess.Read); 
    Image image = Image.FromStream(fs); 
    fs.Close(); 

    Bitmap b = new Bitmap(image); 
    Graphics graphics = Graphics.FromImage(b); 
    graphics.DrawString("Hello", this.Font, Brushes.Black, 0, 0); 

    b.Save(@"c:\somepic.gif", image.RawFormat); 

    image.Dispose(); 
    b.Dispose(); 

ho iniziato ad esaminare questo abbastanza a fondo però :)

+0

Gioca solo per l'avvocato del diavolo qui: ovviamente dovrai salvarlo in seguito! –

+0

Speriamo che quanto sopra possa aiutare. –

+0

come ruotare questo testo e quindi aggiungere all'immagine? –

1

Specificamente per gif di avere un risultato gif, si dovrebbe scrivere su ogni frame come la seguente:

string originalImgPath = @"C:\test.gif"; 
Image IMG = Image.FromFile(originalImgPath); 
FrameDimension dimension = new FrameDimension(IMG.FrameDimensionsList[0]); 
int frameCount = IMG.GetFrameCount(dimension); 
int Length = frameCount; 
GifBitmapEncoder gEnc = new GifBitmapEncoder(); 
for (int i = 0; i < Length; i++) 
{ 
    // Get each frame 
    IMG.SelectActiveFrame(dimension, i); 
    var aFrame = new Bitmap(IMG); 

    // write one the selected frame 
    Graphics graphics = Graphics.FromImage(aFrame); 
    graphics.DrawString("Hello", new Font("Arial", 24, System.Drawing.FontStyle.Bold), System.Drawing.Brushes.Black, 50, 50); 
    var bmp = aFrame.GetHbitmap(); 
    var src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
       bmp, 
       IntPtr.Zero, 
       Int32Rect.Empty, 
       BitmapSizeOptions.FromEmptyOptions()); 
    // merge frames 
    gEnc.Frames.Add(BitmapFrame.Create(src)); 
} 

string saveImgFile = @"C:\modified_test.gif" 
using (FileStream fs2 = new FileStream(saveImgFile, FileMode.Create)) 
{ 
    gEnc.Save(fs2); 
} 

Avrei dovuto dire che ottenere i frame GIF da this post.

+0

https://stackoverflow.com/a/48395131/485008 –

Problemi correlati