web-dev-qa-db-ja.com

C#で画像にテキストを書き込む

次の問題があります。結合形式のようなビットマップ画像でグラフィックを作成したい

画像にテキストを書くことができます
しかし、私はさまざまな位置にもっとテキストを書く

Bitmap a = new Bitmap(@"path\picture.bmp");

using(Graphics g = Graphics.FromImage(a))
{
    g.DrawString(....); // requires font, brush etc
}

テキストを書き込んで保存し、保存した画像に別のテキストを書き込むにはどうすればよいですか。

27
Mr Alemi

複数の文字列を描画するには、graphics.DrawStringを複数回呼び出します。描画された文字列の場所を指定できます。この例では、2つの文字列 "Hello"、 "Word"(赤色の "Hello"を前面に、 "Word"を赤色)で描画します。

string firstText = "Hello";
string secondText = "World";

PointF firstLocation = new PointF(10f, 10f);
PointF secondLocation = new PointF(10f, 50f);

string imageFilePath = @"path\picture.bmp"
Bitmap bitmap = (Bitmap)Image.FromFile(imageFilePath);//load the image file

using(Graphics graphics = Graphics.FromImage(bitmap))
{
    using (Font arialFont =  new Font("Arial", 10))
    {
        graphics.DrawString(firstText, arialFont, Brushes.Blue, firstLocation);
        graphics.DrawString(secondText, arialFont, Brushes.Red, secondLocation);
    }
}

bitmap.Save(imageFilePath);//save the image file

編集:「ロードを追加してコードを保存」。

Image.FromFileいつでもビットマップファイルを開き、上記のコードを使用して新しいテキストを描画できます。その後、画像ファイルを保存しますbitmap.Save

67
Jalal Said

Graphics.DrawString の呼び出しの例は、 here から取得したものです。

g.DrawString("My\nText", new Font("Tahoma", 40), Brushes.White, new PointF(0, 0));

明らかに、Tahomaというフォントがインストールされていることに依存しています。

Brushesクラスには多くの組み込みブラシがあります。

Graphics.DrawString のMSDNページも参照してください。

3
George Duckett

同じファイルへの変更を保存するには、 Jalal Said の回答と NSGagathis の質問の回答を組み合わせる必要がありました。古いオブジェクトに基づいて新しいBitmapオブジェクトを作成し、古いBitmapオブジェクト、次に新しいオブジェクトを使用して保存します。

string firstText = "Hello";
string secondText = "World";

PointF firstLocation = new PointF(10f, 10f);
PointF secondLocation = new PointF(10f, 50f);

string imageFilePath = @"path\picture.bmp";

Bitmap newBitmap;
using (var bitmap = (Bitmap)Image.FromFile(imageFilePath))//load the image file
{
    using(Graphics graphics = Graphics.FromImage(bitmap))
    {
        using (Font arialFont =  new Font("Arial", 10))
        {
            graphics.DrawString(firstText, arialFont, Brushes.Blue, firstLocation);
            graphics.DrawString(secondText, arialFont, Brushes.Red, secondLocation);
        }
    }
    newBitmap = new Bitmap(bitmap);
}

newBitmap.Save(imageFilePath);//save the image file
newBitmap.Dispose();
2
Ibrahim