欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#如何实现图片的剪裁并保存

程序员文章站 2022-03-26 08:37:44
最近需要将一张图片上传并按指定位置剪裁,后来在网上找了一个剪裁图片的插件,但是只有前台没有后端,然后我各种百度,并最终完成,特此写一篇博客略表纪念。 前台我就不说了,用的...

最近需要将一张图片上传并按指定位置剪裁,后来在网上找了一个剪裁图片的插件,但是只有前台没有后端,然后我各种百度,并最终完成,特此写一篇博客略表纪念。

前台我就不说了,用的cropper插件,有兴趣的自己去百度找找吧。 有这个插件。

下面是代码:

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} 剪裁之后参数
javascriptserializer jss = new javascriptserializer();
imgsize imagesize = jss.deserialize<imgsize>(datasize);
byte[] filebyte = setfiletobytearray(file);//图片数组
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);

上面代码中用到我自己创建了一个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);
}
}

上面代码中使用到的几个方法:

文件转化:

/// <summary>
/// 将from表单file文件转化为byte数组
/// </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))
{
//清空画布并以透明背景色填充
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();
}
}

最后的结果是把存到了e盘根目录下面

以上所述是小编给大家介绍的c#如何实现图片的剪裁并保存,希望对大家有所帮助