雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁(yè) > 軟件編程 > C#教程 >

C#如何實(shí)現(xiàn)圖片的剪裁并保存

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C#教程|點(diǎn)擊:

最近需要將一張圖片上傳并按指定位置剪裁,后來(lái)在網(wǎng)上找了一個(gè)剪裁圖片的插件,但是只有前臺(tái)沒(méi)有后端,然后我各種百度,并最終完成,特此寫(xiě)一篇博客略表紀(jì)念。

前臺(tái)我就不說(shuō)了,用的cropper插件,有興趣的自己去百度找找吧。我們 有這個(gè)插件。

下面是代碼:

HttpPostedFile file = context.Request.Files["avatar_file"];
string datasize = context.Request.Params["avatar_data"];
//{"x":30.003846153846148,"y":16.715384615384625,"height":300.8,"width":300.8,"rotate":0} 剪裁之后參數(shù)
JavaScriptSerializer jss = new JavaScriptSerializer();
ImgSize imagesize = jss.Deserialize<ImgSize>(datasize);
byte[] FileByte = SetFileToByteArray(file);//圖片數(shù)組
string strtExtension = System.IO.Path.GetExtension(file.FileName);//圖片格式
MemoryStream ms1 = new MemoryStream(FileByte);
Bitmap sBitmap = (Bitmap)Image.FromStream(ms1);
Rectangle section = new Rectangle(new Point(imagesize.ToInt(imagesize.x), imagesize.ToInt(imagesize.y)), new Size(imagesize.ToInt(imagesize.width), imagesize.ToInt(imagesize.height)));
Bitmap CroppedImage = MakeThumbnailImage(sBitmap, section.Width, section.Height, section.Width, section.Height, section.X, section.Y);

上面代碼中用到我自己創(chuàng)建了一個(gè)ImgSize類,代碼如下:

class ImgSize
{
//{"x":30.003846153846148,"y":16.715384615384625,"height":300.8,"width":300.8,"rotate":0}
public double x { get; set; }
public double y { get; set; }
public double width { get; set; }
public double height { get; set; }
public int rotate { get; set; }
public int ToInt(double doubleValue)
{
return Convert.ToInt32(doubleValue);
}
}

上面代碼中使用到的幾個(gè)方法:

文件轉(zhuǎn)化:

/// <summary>
/// 將From表單file文件轉(zhuǎn)化為byte數(shù)組
/// </summary>
/// <param name="File">from提交文件流</param>
/// <returns></returns>
private byte[] SetFileToByteArray(HttpPostedFile File)
{
Stream stream = File.InputStream;
byte[] AyyayByte = new byte[File.ContentLength];
stream.Read(AyyayByte, 0, File.ContentLength);
stream.Close();
return AyyayByte;
}

核心剪裁方法:

/// <summary>
/// 裁剪圖片并保存
/// </summary>
/// <param name="Image">圖片信息</param>
/// <param name="maxWidth">縮略圖寬度</param>
/// <param name="maxHeight">縮略圖高度</param>
/// <param name="cropWidth">裁剪寬度</param>
/// <param name="cropHeight">裁剪高度</param>
/// <param name="X">X軸</param>
/// <param name="Y">Y軸</param>
public static Bitmap MakeThumbnailImage(Image originalImage, int maxWidth, int maxHeight, int cropWidth, int cropHeight, int X, int Y)
{
Bitmap b = new Bitmap(cropWidth, cropHeight);
try
{
using (Graphics g = Graphics.FromImage(b))
{
//清空畫(huà)布并以透明背景色填充
g.Clear(Color.Transparent);
//在指定位置并且按指定大小繪制原圖片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, cropWidth, cropHeight), X, Y, cropWidth, cropHeight, GraphicsUnit.Pixel);
Image displayImage = new Bitmap(b, maxWidth, maxHeight);
displayImage.Save("E:\\cutimg.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
Bitmap bit = new Bitmap(b, maxWidth, maxHeight);
return bit;
}
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
b.Dispose();
}
}

最后的結(jié)果是把存到了E盤根目錄下面

以上所述是小編給大家介紹的C#如何實(shí)現(xiàn)圖片的剪裁并保存,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的,在此也非常感謝大家對(duì)我們網(wǎng)站的支持!

上一篇:C#條碼生成及打印實(shí)例代碼

欄    目:C#教程

下一篇:C# 繪制統(tǒng)計(jì)圖大全(柱狀圖, 折線圖, 扇形圖)

本文標(biāo)題:C#如何實(shí)現(xiàn)圖片的剪裁并保存

本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6189.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有