如何解决如何根据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 });
}
}
解决方法
我通过将New“ WaterMarkNewHeight”和“ WaterMarkNewWidth”传递给类“ 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。