裁剪图片

  1 using System;
  2 using System.Drawing;
  3 using System.Drawing.Drawing2D;
  4 using System.IO;
  5
  6 namespace ClassLibrary
  7 {
  8     /// <summary>
  9     /// 图片处理
 10     /// </summary>
 11     public static class Img
 12     {
 13         #region 图片裁剪
 14         #region 通过文件路径图片
 15         /// <summary>
 16         /// 通过文件路径裁剪图片
 17         /// </summary>
 18         /// <param name="imgFile">文件路径</param>
 19         /// <param name="startX">图片左上角X坐标</param>
 20         /// <param name="startY">图片左上角Y坐标</param>
 21         /// <param name="width">截取宽度</param>
 22         /// <param name="height">截取高度</param>
 23         /// <param name="widthS">图片显示宽度</param>
 24         /// <param name="heightS">图片显示高度</param>
 25         /// <returns></returns>
 26         public static Image ImgCutFromFile(string imgFile, int startX, int startY, int width, int height, int widthS = 0, int heightS=0)
 27         {
 28             Image img = Image.FromFile(imgFile);
 29             if (widthS > 0 && heightS > 0)
 30             {
 31                 GetXYWH(ref startX, ref startY, ref width, ref height, widthS, heightS, img);
 32             }
 33             return ImgCut(img, startX, startY, width, height);
 34         }
 35         #endregion
 36
 37         #region 通过流图片
 38         /// <summary>
 39         /// 通过流图片
 40         /// </summary>
 41         /// <param name="stream">流</param>
 42         /// <param name="startX">图片左上角X坐标</param>
 43         /// <param name="startY">图片左上角Y坐标</param>
 44         /// <param name="width">截取宽度</param>
 45         /// <param name="height">截取高度</param>
 46         /// <param name="widthS">图片显示宽度</param>
 47         /// <param name="heightS">图片显示高度</param>
 48         /// <returns></returns>
 49         public static Image ImgCutFromStream(Stream stream, int startX, int startY, int width, int height, int widthS = 0, int heightS = 0)
 50         {
 51             Image img = Image.FromStream(stream);
 52             if (widthS > 0 && heightS > 0)
 53             {
 54                 GetXYWH(ref startX, ref startY, ref width, ref height, widthS, heightS, img);
 55             }
 56             return ImgCut(img, startX, startY, width, height);
 57         }
 58         #endregion
 59
 60         #region 获取实际XYWH
 61         /// <summary>
 62         /// 获取实际XYWH
 63         /// </summary>
 64         /// <param name="startX">图片左上角X坐标</param>
 65         /// <param name="startY">图片左上角Y坐标</param>
 66         /// <param name="width">截取宽度</param>
 67         /// <param name="height">截取高度</param>
 68         /// <param name="widthS">图片显示宽度</param>
 69         /// <param name="heightS">图片显示高度</param>
 70         /// <param name="img"></param>
 71         private static void GetXYWH(ref int startX, ref int startY, ref int width, ref int height, int widthS, int heightS, Image img)
 72         {
 73             /*img.Width / widthS 是实际图片大小与页面显示图片大小比值*/
 74             startX = Convert.ToInt32(startX * img.Width / widthS);
 75             startY = Convert.ToInt32(startY * img.Height / heightS);
 76             width = Convert.ToInt32(width * img.Width / widthS);
 77             height = Convert.ToInt32(height * img.Height / heightS);
 78         }
 79         #endregion
 80
 81         #region 执行剪裁
 82         /// <summary>
 83         /// 图片裁剪
 84         /// </summary>
 85         /// <param name="image">图片</param>
 86         /// <param name="startX">图片左上角X坐标</param>
 87         /// <param name="startY">图片左上角Y坐标</param>
 88         /// <param name="width">截取宽度</param>
 89         /// <param name="height">截取高度</param>
 90         /// <returns></returns>
 91         public static Image ImgCut(Image image, int startX, int startY, int width, int height)
 92         {
 93             Image img = image;//获取原始图片
 94             Image newImg = new Bitmap(width, height);//裁剪后的图片
 95             Graphics g = Graphics.FromImage(newImg);
 96             /*设置质量*/
 97             g.InterpolationMode = InterpolationMode.HighQualityBicubic;
 98             g.SmoothingMode = SmoothingMode.HighQuality;
 99             /*图片源位置,图片源大小*/
100             Rectangle fromR = new Rectangle(startX, startY, width, height);
101             /*绘图位置绘图大小*/
102             Rectangle toR = new Rectangle(0, 0, width, height);
103             /*画图*/
104             g.DrawImage(img, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
105             /*释放截图资源*/
106             g.Dispose();
107             return newImg;
108             //newImg.Save(Server.MapPath(""));
109             //newImg.Dispose();
110         }
111         #endregion
112         #endregion
113
114         #region 改变图片大小
115         /// <summary>
116         /// 改变图片大小
117         /// </summary>
118         /// <param name="image">图片</param>
119         /// <param name="width">新宽度</param>
120         /// <param name="height">新高度</param>
121         /// <returns></returns>
122         public static Image ImgSize(Image image, int width = 0, int height = 0)
123         {
124             Image img = image;//获取原始图片
125             Image newImg = new Bitmap(width, height);//裁剪后的图片
126             Graphics g = Graphics.FromImage(newImg);
127             /*设置质量*/
128             g.InterpolationMode = InterpolationMode.HighQualityBicubic;
129             g.SmoothingMode = SmoothingMode.HighQuality;
130             /*图片源位置,图片源大小*/
131             Rectangle fromR = new Rectangle(0, 0, img.Width, img.Height);
132             /*绘图位置绘图大小*/
133             if (width == 0 && height == 0) {
134                 width = img.Width;
135                 height = img.Height;
136             }
137             Rectangle toR = new Rectangle(0, 0, width, height);
138             /*画图*/
139             g.DrawImage(img, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
140             /*释放截图资源*/
141             g.Dispose();
142             return newImg;
143         }
144         #endregion
145     }
146 }

时间: 2024-08-06 12:39:58

裁剪图片的相关文章

自定义裁剪图片

判断图片大小,根据裁剪目标对图片进行缩放,然后裁剪图片(在图像不变形情况下) /// <summary> /// 指定长宽裁剪 /// 按模版比例最大范围的裁剪图片并缩放至模版尺寸 /// </summary> /// <param name="fromFile">原图Stream对象</param> /// <param name="fileSaveUrl">保存路径</param> ///

Quartz2D练习 -- 裁剪图片分类

Main.storyboard <?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVers

IOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // rect:裁剪图片的尺寸,传递是像素 CGImageRef norImage = CGImageCreateWithImageInRect(norBigImage.CGImage, clipRect); 2.每次点击按钮立马变为选中状态,并且取消上次的按钮的选中状态 当然还要重写- (void)setH

IOS 按比例裁剪图片

拍照或者从图片库中获取图片 操作过程中容易闪退,也总会有内存压力警告,第一步,首先可以考虑裁剪图片,实际上可能不需要那么大的.其次可以考虑把耗时的比如存储过程放进线程. 这里封装裁剪图片的类方法. //NavView.m #define IMAGE_MAX_SIZE_WIDTH 640 #define IMAGE_MAX_SIZE_GEIGHT 1136 +(UIImage *)fitSmallImage:(UIImage *)image { if (nil == image) { return

MVC使用JCrop上传、裁剪图片

JCrop用来裁剪图片,本篇想体验的是: 在视图页上传图片: 上传成功,跳转到另外一个编辑视图页,使用JCrop对该图片裁剪,并保存图片到指定文件夹: 裁剪成功后,在主视图页显示裁剪图片: 当然,实际项目中最有可能的做法是:在本页上传.裁剪并保存. □ 思路 →在上传图片视图页,把图片上传保存到一个临时文件夹Upload→在编辑裁剪视图页,点击"裁剪"按钮,把JCrop能提供的参数,比如宽度.高度.离顶部距离,离底部距离,离左右端距离等封装成类,传递给控制器方法→控制器方法根据接收到的

Android拍照、相册选取、裁剪图片

来自:http://blog.csdn.net/ryantang03/article/details/8656278 package com.example.listactivity; import java.io.ByteArrayOutputStream; import java.io.File; import com.example.model.ImageTools; import android.app.Activity; import android.app.AlertDialog;

调用 android 系统拍照结合 android-crop 裁剪图片

在一个应用中更换用户的头像,一般有拍照和从图库中选择照片两种方法,现在网上也有很多开源的,但是很多都太复杂.而 Android-crop 这个库比较小,代码不复杂,比较适合,但是它没有拍照这个功能,需要我们自己整合进去. 调用系统相机拍照 返回略缩图的拍照 // 调用系统的拍照 private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTU

Android 从图库选择图片,拍照图片,裁剪图片

我直接写代码了 1先来几个常亮 private static final int PHOTO_REQUEST_CAREMA = 1;// 拍照private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择private static final int PHOTO_REQUEST_CUT = 3;// 结果private static final String PHOTO_FILE_NAME = "temp_photo.jpg"

UIImage 裁剪图片和等比列缩放图片

本文转载至 http://blog.csdn.net/cuiweijie3/article/details/9514293 转自 http://www.tedz.me/ios/uiimage-crop-resize-image @interface UIImage(UIImageScale) -(UIImage*)getSubImage:(CGRect)rect; -(UIImage*)scaleToSize:(CGSize)size; @end @implementation UIImage(

HTML5 本地裁剪图片并上传至服务器(转)

很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 5 步.步骤繁琐不说,当很多用户上传图片的时候也很影响服务器性能. HTML5 的出现让我们可以更方便的实现这一需求.虽然这里所说的技术都貌似有点过时了(前端界的“过时”,你懂的),但还是有些许参考价值.在这里我只说一下要点,具体实现同学们慢慢研究. 下面奉上我自己写的一个demo,在输入框中选好