2009-04-02 19 views
10

Ich muss Text zu einer Bilddatei hinzufügen. Ich muss eine Bilddatei lesen (jpg, png, gif) und ich muss einen Linientext hinzufügen.Hinzufügen von Text zu einer Bilddatei

+0

Ein Blick darauf. Das Problem besteht darin, dass beim Öffnen der Datei diese gesperrt ist, sodass Sie sie nicht in derselben Datei speichern können. Ich melde mich bei dir ... –

Antwort

0

Sie können dies tun, indem Sie das Graphics-Objekt in C# verwenden. Sie können ein Graphics-Objekt aus dem Bild (image.CreateGraphics() - oder etwas so, wie ich mich erinnere) und die Verwendung einiger der eingebauten Methoden zum Hinzufügen von Text wie: Graphycs.DrawString() oder andere verwandte Methoden.

20

Nun in GDI + Sie würden in der Datei mit einer Image-Klasse lesen und dann verwenden Sie die Graphics-Klasse, um Text hinzuzufügen. Etwas wie:

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

Wenn Sie die Datei über die alte speichern möchten, wird der Code hat ein bisschen als Image.FromFile() -Methode ändern sperrt die Datei, bis sie entsorgt wird. Hier finden Sie, was ich kam mit:

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(); 

ich dies ganz gründlich

+0

Ich spiele hier einfach den Anwalt des Teufels: Du musst ihn natürlich später speichern! –

+0

Hoffentlich hilft das oben genannte. –

+0

Wie man diesen Text dreht und dann zum Bild hinzufügt? –

1

Insbesondere aber :) testen würde für Gifs ein gif Ergebnis haben, können Sie auf jeden Frame wie folgt schreiben sollte:

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); 
} 

Ich hätte erwähnen müssen, dass GIF-Frames von this post bekommen.

+0

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

Verwandte Themen