如何在 MVC C# 中根据主图像或输出图像的大小增加或减少水印图像大小
How to Increase or decrease Watermark Image size according to the size of Main or output Image in MVC C#
这里我将两张图片合并为一张图片,一张是水印图片,第二张是要合并水印的主图片或输出图片。
现在我想根据我上传的主图来增减水印图的大小
public ActionResult WaterMarkImage(HttpPostedFileBase fileToUpload)
{
using (Image image = Image.FromStream(fileToUpload.InputStream, true, false))
{
string name = Path.GetFileNameWithoutExtension(fileToUpload.FileName);
var ext = Path.GetExtension(fileToUpload.FileName);
string myfile = name + ext;
var saveImagePath = Path.Combine(Server.MapPath("~/ImgWatermark"), myfile);
Image watermarkImage = Image.FromFile(Server.MapPath("/Img/LogoImage2.png"));
Watermarker objWatermarker = new Watermarker(image);
// Set the properties for the logo
objWatermarker.Position = WatermarkPosition.Absolute;
objWatermarker.PositionX = (int)(image.Width / 2 - watermarkImage.Width / 2);
objWatermarker.PositionY = (int)(image.Height / 2 - watermarkImage.Height / 2);
objWatermarker.ScaleRatio = 1;
objWatermarker.Margin = new Padding(0);
objWatermarker.Opacity = 0.5f;
objWatermarker.TransparentColor = Color.White;
// Drawing the logo image on Main image
objWatermarker.DrawImage(watermarkImage);
objWatermarker.Image.Save(saveImagePath);
return RedirectToAction("Index", new { imgName = myfile });
}
}
我通过将新的“WaterMarkNewHeight”和“WaterMarkNewWidth”传递给 class“resizeImage”解决了问题。
public ActionResult WaterMarkImage(HttpPostedFileBase fileToUpload)
{
using (Image image = Image.FromStream(fileToUpload.InputStream, true, false))
{
string name = Path.GetFileNameWithoutExtension(fileToUpload.FileName);
var ext = Path.GetExtension(fileToUpload.FileName);
string myfile = name + ext;
//System.Drawing.Image bitmap = image;
var saveImagePath = Path.Combine(Server.MapPath("~/ImgWatermark"), myfile);
System.Drawing.Image watermarkImage = System.Drawing.Image.FromFile(Server.MapPath("/Img/LogoImage2.png"));
Watermarker objWatermarker = new Watermarker(image);
// Set the properties for the logo
objWatermarker.Position = WatermarkPosition.Center;
objWatermarker.PositionX = (int)(image.Width - watermarkImage.Width) / 2;
objWatermarker.PositionY = (int)(image.Height - watermarkImage.Height) / 2;
int WaterMarkNewWidth = image.Width / 2;
int WaterMarkNewHeight = image.Height / 4;
//watermarkImage.Size.Width = WaterMarkNewWidth;
objWatermarker.Margin = new Padding(0);
objWatermarker.Opacity = 0.4f;
objWatermarker.TransparentColor = Color.White;
Image watermarkImage1 = resizeImage(WaterMarkNewWidth, WaterMarkNewHeight, watermarkImage);
// Draw the logo
objWatermarker.DrawImage(watermarkImage1);
//Draw the Text
//objWatermarker.DrawText("WaterMarkDemo");
objWatermarker.Image.Save(saveImagePath);
return RedirectToAction("Index", new { imgName = myfile });
}
}
public Image resizeImage(int newWidth, int newHeight, Image stPhotoPath)
{
Image imgPhoto = stPhotoPath;
int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;
//Consider vertical pics
if (sourceWidth < sourceHeight)
{
int buff = newWidth;
newWidth = newHeight;
newHeight = buff;
}
int sourceX = 0, sourceY = 0, destX = 0, destY = 0;
float nPercent = 0, nPercentW = 0, nPercentH = 0;
nPercentW = ((float)newWidth / (float)sourceWidth);
nPercentH = ((float)newHeight / (float)sourceHeight);
if (nPercentH < nPercentW)
{
nPercent = nPercentH;
destX = System.Convert.ToInt16((newWidth -
(sourceWidth * nPercent)) / 2);
}
else
{
nPercent = nPercentW;
destY = System.Convert.ToInt16((newHeight -
(sourceHeight * nPercent)) / 2);
}
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap bmPhoto = new Bitmap(newWidth, newHeight,
PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolution,
imgPhoto.VerticalResolution);
Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.Clear(Color.White);
grPhoto.InterpolationMode =
System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
grPhoto.DrawImage(imgPhoto,
new Rectangle(destX, destY, destWidth, destHeight),
new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
GraphicsUnit.Pixel);
grPhoto.Dispose();
imgPhoto.Dispose();
return bmPhoto;
}
这里我将两张图片合并为一张图片,一张是水印图片,第二张是要合并水印的主图片或输出图片。
现在我想根据我上传的主图来增减水印图的大小
public ActionResult WaterMarkImage(HttpPostedFileBase fileToUpload)
{
using (Image image = Image.FromStream(fileToUpload.InputStream, true, false))
{
string name = Path.GetFileNameWithoutExtension(fileToUpload.FileName);
var ext = Path.GetExtension(fileToUpload.FileName);
string myfile = name + ext;
var saveImagePath = Path.Combine(Server.MapPath("~/ImgWatermark"), myfile);
Image watermarkImage = Image.FromFile(Server.MapPath("/Img/LogoImage2.png"));
Watermarker objWatermarker = new Watermarker(image);
// Set the properties for the logo
objWatermarker.Position = WatermarkPosition.Absolute;
objWatermarker.PositionX = (int)(image.Width / 2 - watermarkImage.Width / 2);
objWatermarker.PositionY = (int)(image.Height / 2 - watermarkImage.Height / 2);
objWatermarker.ScaleRatio = 1;
objWatermarker.Margin = new Padding(0);
objWatermarker.Opacity = 0.5f;
objWatermarker.TransparentColor = Color.White;
// Drawing the logo image on Main image
objWatermarker.DrawImage(watermarkImage);
objWatermarker.Image.Save(saveImagePath);
return RedirectToAction("Index", new { imgName = myfile });
}
}
我通过将新的“WaterMarkNewHeight”和“WaterMarkNewWidth”传递给 class“resizeImage”解决了问题。
public ActionResult WaterMarkImage(HttpPostedFileBase fileToUpload)
{
using (Image image = Image.FromStream(fileToUpload.InputStream, true, false))
{
string name = Path.GetFileNameWithoutExtension(fileToUpload.FileName);
var ext = Path.GetExtension(fileToUpload.FileName);
string myfile = name + ext;
//System.Drawing.Image bitmap = image;
var saveImagePath = Path.Combine(Server.MapPath("~/ImgWatermark"), myfile);
System.Drawing.Image watermarkImage = System.Drawing.Image.FromFile(Server.MapPath("/Img/LogoImage2.png"));
Watermarker objWatermarker = new Watermarker(image);
// Set the properties for the logo
objWatermarker.Position = WatermarkPosition.Center;
objWatermarker.PositionX = (int)(image.Width - watermarkImage.Width) / 2;
objWatermarker.PositionY = (int)(image.Height - watermarkImage.Height) / 2;
int WaterMarkNewWidth = image.Width / 2;
int WaterMarkNewHeight = image.Height / 4;
//watermarkImage.Size.Width = WaterMarkNewWidth;
objWatermarker.Margin = new Padding(0);
objWatermarker.Opacity = 0.4f;
objWatermarker.TransparentColor = Color.White;
Image watermarkImage1 = resizeImage(WaterMarkNewWidth, WaterMarkNewHeight, watermarkImage);
// Draw the logo
objWatermarker.DrawImage(watermarkImage1);
//Draw the Text
//objWatermarker.DrawText("WaterMarkDemo");
objWatermarker.Image.Save(saveImagePath);
return RedirectToAction("Index", new { imgName = myfile });
}
}
public Image resizeImage(int newWidth, int newHeight, Image stPhotoPath)
{
Image imgPhoto = stPhotoPath;
int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;
//Consider vertical pics
if (sourceWidth < sourceHeight)
{
int buff = newWidth;
newWidth = newHeight;
newHeight = buff;
}
int sourceX = 0, sourceY = 0, destX = 0, destY = 0;
float nPercent = 0, nPercentW = 0, nPercentH = 0;
nPercentW = ((float)newWidth / (float)sourceWidth);
nPercentH = ((float)newHeight / (float)sourceHeight);
if (nPercentH < nPercentW)
{
nPercent = nPercentH;
destX = System.Convert.ToInt16((newWidth -
(sourceWidth * nPercent)) / 2);
}
else
{
nPercent = nPercentW;
destY = System.Convert.ToInt16((newHeight -
(sourceHeight * nPercent)) / 2);
}
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap bmPhoto = new Bitmap(newWidth, newHeight,
PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolution,
imgPhoto.VerticalResolution);
Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.Clear(Color.White);
grPhoto.InterpolationMode =
System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
grPhoto.DrawImage(imgPhoto,
new Rectangle(destX, destY, destWidth, destHeight),
new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
GraphicsUnit.Pixel);
grPhoto.Dispose();
imgPhoto.Dispose();
return bmPhoto;
}