Why is the resulting .PNG file so much larger than the original using the code below?
Code: Select all
private void TextOnImage()
{
var image = new MagickImage(@"D:\Webs\mydomain.com\images\419608890268243889.jpg"); // 147K on size
// var image = new MagickImage(MagickColors.Red, 1000, 1000);
MagickImage imageresult;
MagickImage modimage;
try
{
using (var images = new MagickImageCollection())
{
int widthOfImage = GetProperFontSize(image);
var topheaderSnippetreadSettings = new MagickReadSettings()
{
BackgroundColor = MagickColors.LightBlue,
FontFamily = "Showcard Gothic",
Width = image.Width - 190,
//FontPointsize = widthOfImage,
FillColor = MagickColors.Black,
FontWeight = FontWeight.Bold
};
var headerSnippetreadSettings = new MagickReadSettings()
{
BackgroundColor = MagickColors.LightBlue,
FontFamily = "Showcard Gothic",
Width = image.Width - 60, // was 60
//FontPointsize = widthOfImage,
FillColor = MagickColors.Black,
FontWeight = FontWeight.Bold
};
// This will make the background of the label Khaki.
var readSettings = new MagickReadSettings()
{
BackgroundColor = MagickColors.LightBlue,
FontFamily = "Helvetica-Condensed-Light", // -font Helvetica-Condensed-Light
FontPointsize = widthOfImage, // -pointsize 26
FillColor = MagickColors.Black,
FontWeight = FontWeight.Bold
};
// Create the label image.
var branding = new MagickImage("label:MyDomain.com", readSettings);
// Create the label image.
var topheading = new MagickImage("label:Great Kitchen Decor Ideas", topheaderSnippetreadSettings);
// var topheading = new MagickImage("label:Our Site Is Full of Great Cooking Tips", topheaderSnippetreadSettings);
// Create the label image.
var bottomheading = new MagickImage("label:Great Cooking Tips From Our Kitchen to Your Table", headerSnippetreadSettings);
branding.Extent(image.Width, 50, Gravity.Center);
topheading.Extent(image.Width, 50, Gravity.Center);
bottomheading.Extent(image.Width, 50, Gravity.Center);
// add the images to the collection
images.Add(topheading);
images.Add(image);
images.Add(bottomheading);
images.Add(branding);
// Append the images to create the output image.
using (var result = images.AppendVertically())
{
imageresult = new MagickImage(result);
// imageresult gets disposed of in the rounding code below, so need to write the imageresult to a new image
modimage = new MagickImage(imageresult);
}
}
using (imageresult)
{
using (var mask = new MagickImage(MagickColors.White, imageresult.Width, imageresult.Height))
{
var size = 150;
new ImageMagick.Drawables()
.FillColor(MagickColors.Black)
.StrokeColor(MagickColors.Black)
.Polygon(new PointD(0, 0), new PointD(0, size), new PointD(size, 0))
.Polygon(new PointD(mask.Width, 0), new PointD(mask.Width, size), new PointD(mask.Width - size, 0))
.Polygon(new PointD(0, mask.Height), new PointD(0, mask.Height - size), new PointD(size, mask.Height))
.Polygon(new PointD(mask.Width, mask.Height), new PointD(mask.Width, mask.Height - size), new PointD(mask.Width - size, mask.Height))
.FillColor(MagickColors.White)
.StrokeColor(MagickColors.White)
.Circle(size, size, size, 0)
.Circle(mask.Width - size, size, mask.Width - size, 0)
.Circle(size, mask.Height - size, 0, mask.Height - size)
.Circle(mask.Width - size, mask.Height - size, mask.Width - size, mask.Height)
// .BorderColor(MagickColors.Red)
.Draw(mask);
// This copies the pixels that were already transparent on the mask.
using (var imageAlpha = imageresult.Clone())
{
imageAlpha.Alpha(AlphaOption.Extract);
imageAlpha.Opaque(MagickColors.White, MagickColors.None);
mask.Composite(imageAlpha, CompositeOperator.Over);
}
mask.HasAlpha = false;
imageresult.HasAlpha = false;
imageresult.Composite(mask, CompositeOperator.CopyAlpha);
// imageresult gets disposed of so need to write the imageresult to a new image
modimage = new MagickImage(imageresult);
}
}
pinImagePB.Image = modimage.ToBitmap();
// resize the image to fit the PictureBox size
pinImagePB.SizeMode = PictureBoxSizeMode.StretchImage;
modimage.Write(@"D:\TestImage.png");
FileInfo imageMod = new FileInfo(@"D:\TestImage.png");
ImageOptimizer optimizer = new ImageOptimizer();
optimizer.OptimalCompression = true;
// optimizer.LosslessCompress(imageMod);
optimizer.Compress(imageMod);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}