2009-04-02 7 views
10

イメージファイルにテキストを追加する必要があります。私は1つのイメージファイル(jpg、png、gif)を読む必要があり、それに1行のテキストを追加する必要があります。イメージファイルにテキストを追加する

+0

それを見る。問題は、ファイルを開くときにロックされているため、同じファイルに保存できないことです。あなたに戻ってきます... –

答えて

0

これは、C#のGraphicsオブジェクトを使用して行うことができます。画像(Graphics.CreateGraphics()など)からGraphicsオブジェクトを取得し、Graphics.DrawString()やその他の関連メソッドのようなテキストを追加するための組み込みのメソッドを使用できます。

20

GDI +では、Imageクラスを使用してファイルを読み込んだ後、Graphicsクラスを使用してテキストを追加します。ような何か:あなたは古いものの上にファイルを保存したい場合は

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

は、コードは、それが配置されるまでImage.FromFile()メソッドは、ファイルをロックしてビットを変更することがあります。

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

私はGIFファイルはGIF結果を持っているため、次のように各フレームに書く必要があります。具体的

+0

ここで悪魔の主唱者を演奏してください:あなたは明らかに後でそれを保存する必要があります! –

+0

うまくいけば、上記が役立ちます。 –

+0

このテキストを回転してイメージに追加する方法は? –

1

:)かかわらず、非常に徹底的にこれをテストします::以下は、私が思い付いたものです

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

GIFフレームをthis postから取得する必要があります。

+0

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

関連する問題