ロゴやウォーターマークなどを透過して重ね合わせる方法を紹介します。
例えばある画像にロゴ画像を重ね合わせる時などに使います。
コードでは、baseImagePathには元の画像のパスを、logoImagePathには重ね合わせるロゴ画像のパスを設定するイメージです。
transparentLogoオブジェクトに、透過したロゴ画像が格納されます。
ロゴは50%に透過して重ね合わせます。
var baseImagePath = @"C:\Image\image.jpg";
var logoImagePath = @"C:\Image\logo.jpg";
var baseImage = new Bitmap(baseImagePath);
var logoImage = new Bitmap(logoImagePath);
var newImage = new Bitmap(baseImage);
var transparentLogo = new Bitmap(logoImage.Width, logoImage.Height);
var gl = Graphics.FromImage(transparentLogo);
var c = new System.Drawing.Imaging.ColorMatrix();
c.Matrix33 = 0.5F;
var i = new System.Drawing.Imaging.ImageAttributes();
i.SetColorMatrix(c);
gl.DrawImage(logoImage, new Rectangle(0, 0, logoImage.Width, logoImage.Height), 0, 0, logoImage.Width, logoImage.Height, GraphicsUnit.Pixel, i);
var g = Graphics.FromImage(newImage);
g.DrawImage(transparentLogo, 0 , 0, logoImage.Width, logoImage.Height);
g.Dispose();
gl.Dispose();
baseImage.Dispose();
logoImage.Dispose();
transparentLogo.Dispose();
newImage.Save(@"C:\Image\new.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
newImage.Dispose();
手順はとても簡単です。
- パスをもとにBitmapオブジェクトを生成する(4~6行目)
- Graphics.DrawImageメソッドで透過率を調整する(20行目)
- Graphics.DrawImageメソッドで2枚の画像を重ね合わせる(23行目)
- 重ね合わせた画像を保存する(32行目)
そのままPictureBoxに表示したり、応用的な使い方も可能です。
画像の保存形式を変更したり、重ねる画像の位置を調整したり、重ねる画像の大きさを変更する方法はこちらの記事を参考にしてください。
透過率の調整
透過率はColorMatrixオブジェクトのMatrix33の値を調整します。
50%なら0.5、30%なら0.3といった感じです。
c.Matrix33 = 0.5F;
ColorMatrixは「c.Matrix33 = 」という風に設定せずコンストラクタで初期化することも可能ですが、この方がシンプルになります。
WaterMarker
この画像を重ね合わせる処理を利用して製作したのが、ウォーターマークなどを一括して重ね合わせることができる「WaterMarker」というソフトウェアです。
配布はVectorさんで行っています。