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

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

下面是代码:

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#如何实现图片的剪裁并保存,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c
图片裁剪保存
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-09-16 22:52:32

C#如何实现图片的剪裁并保存_C#教程的相关文章

C#图片压缩的实现方法_C#教程

一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的.尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图. 下面贴出我自己琢磨的图片压缩算法,首先这个是未经优化的简单实现: 复制代码 代码如下: public static System.Drawing.Image GetImageThumb(System.Drawing.Image sourceImg, int width, int height)        {   

C#实现图片分割方法与代码_C#教程

1. 概述 有时候我们需要在web页面上显示一张图,比如说一张地图,而这张地图会比较大.这时候如果我们把一张大图分隔成一组小图,那么客户端的显示速度会明显地感觉块.希望阅读本文对你有所帮助. 2. 实现思路 .NET Framework GDI+ 为我们提供了一组丰富地类来编辑图形图像.有关.NET Framework GDI+的详细资料请查阅msdn相关文档.这里只简要叙述本程序要用的的几个类. System.Drawing.Image.LoadFile 方法可以从指定的文件创建 Image 

c++-vc2013下.bmp图片读取处理与保存

问题描述 vc2013下.bmp图片读取处理与保存 写一个C++后台程序,可以自动地对指定文件夹中的bmp图片进行处理,处理后的图片保存到另一个文件夹中,如果文件夹中无需要处理的图片,则程序处于休眠状态 如何遍历指定文件夹中的所有图片文件? 解决方案 void ProcPicDir(CString strPicDir) { CFileFind fileFinder; if (strPicDir.Right(1) == TEXT("")) { int nPos = strPicDir.R

ios-iphone关于图片的剪裁问题

问题描述 iphone关于图片的剪裁问题 用下面的代码剪裁图片: - (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect { CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect); // or use the UIImage wherever you like UIImage * img = [UIImag

mfc读取图片数据,并保存到数组里

问题描述 mfc读取图片数据,并保存到数组里 我使用的是cimage类中的getbits,但是没有成功 求解答, 解决方案 试试用打开文件的方式,二进制模式.要不你看看getbits在运行的时候到底有没有读出来,一步一步调试,问题总会找出来的. 解决方案二: 读取的图片是以特定的数据结构来存放的,不知你要存放到数据里面是有什么用?如果是要对像素进行一些计算操作的话,不妨试试使用opencv库来读图, 读出来的图片是以矩阵形式存放的,对于像素和行列操作都很方便. 解决方案三: MFC 打开文件夹读

jsp实现本地图片预览并保存至数据库中

问题描述 jsp实现本地图片预览并保存至数据库中 预览本地图片,并把图片保存至数据库,如何实现 (是直接获取图片信息保存至数据库好还是将图片上传至服务器再将路径保存到数据库 中更好) 解决方案 参考:http://blog.csdn.net/gulijiang2008/article/details/10252219http://blog.csdn.net/dracowk/article/details/6920746 大量的图片还是直接存文件系统更好.

Android编程实现图片拍照剪裁的方法_Android

本文实例讲述了Android实现图片拍照剪裁的方法.分享给大家供大家参考,具体如下: 调用系统的裁剪工具对相册或者拍照的图片进行裁剪. startActivityforResult用的很恰当,一些系统action需要注意. package com.photosizing; import java.io.ByteArrayOutputStream; import java.io.File; import android.app.Activity; import android.content.In

WordPress实现撮文章第一张远程图片作缩略图并保存到本地

某些项目中,网站允许用户使用外链图片发布文章,或者处于某些特殊原因,网站希望抓取文中的第一张远程图片作为特色图片,并像QQ空间一样,将这张图片保存到本地,并插入到数据库中.总之,完成一系列动作之后,网站希望发现这张原本是远程外链的图片被放在本地,并成为了文章的特色图片. 这个动作我们使用一个hook来实现:  代码如下 复制代码 add_action('publish_post', 'fetch_images',999); 再创建一个fetch_images函数,来实现本文所说的所有功能.  代

.net里面上传大一点的图片后 点击保存按钮只存了图片路径 为什么也慢

问题描述 .net做的网站后台上传大一点的图片后点击保存按钮只存了图片路径为什么也慢?什么原因?在前面上传图片的时候图片已经上传到服务器了,为什么保存按钮存个路径也慢呢?ps:数据库里面的数据量不多 解决方案 解决方案二:代码..........解决方案三:保存图片,通常要先确保用户上传的东西已经上传到服务器,如果用户上传的资料大,肯定会慢.上传成功后,才将保存到服务器的路径保存下来.数据库操作应该不会使瓶颈.解决方案四:确定上传的数据只有文件路径.后台加日志,看处理时间吧.解决方案五:断点看一