C# 图片截取 压缩

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Text;

namespace 
{
public class CutImageHelper
{
/// <summary>
/// 截取图片方法
/// </summary>
/// <param name="stream">图片</param>
/// <param name="dataStream">字节</param>
public static bool CutImage(byte[] stream, out byte[] dataStream)
{
//byte[]==>Bitmap
MemoryStream ms1 = new MemoryStream(stream);
Bitmap bitmap = (Bitmap)Image.FromStream(ms1);
ms1.Close();

int get = bitmap.Width <= bitmap.Height ? bitmap.Width / 2 : bitmap.Height / 2;
int width = bitmap.Width / 2 - get / 2;
int height = bitmap.Height / 2 - get / 2;

if ((width < get) && (height < get))
{
if (((width + get) <= bitmap.Width) && ((height + get) <= bitmap.Height))
{
Bitmap destBitmap = new Bitmap(get, get);//目标图
Rectangle destRect = new Rectangle(0, 0, get, get);//矩形容器
Rectangle srcRect = new Rectangle(width, height, get, get);
Graphics graphics = Graphics.FromImage(destBitmap);
graphics.DrawImage(bitmap, destRect, srcRect, GraphicsUnit.Pixel);
ImageFormat format = ImageFormat.Png;
//压缩
Compress(destBitmap);
//Bitmap==>byte[]
MemoryStream ms = new MemoryStream();
destBitmap.Save(ms, ImageFormat.Bmp);
dataStream = ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以
ms.Close();
return true;
}
else
{
dataStream = new byte[0];
return false;
}
}
else
{
dataStream = new byte[0];
return false;
}
}


public static bool Compress(byte[] stream, out byte[] dataStream)
{
MemoryStream ms1 = new MemoryStream(stream);
Bitmap bitmap = (Bitmap)Image.FromStream(ms1);
ms1.Close();
ImageCodecInfo myImageCodecInfo;
//获得JPEG格式的编码器
myImageCodecInfo = GetEncoderInfo("image/jpeg");
System.Drawing.Imaging.Encoder myEncoder =System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters= new EncoderParameters(1); ;
EncoderParameter myEncoderParameter= new EncoderParameter(myEncoder, 15L);
myEncoderParameters.Param[0] = myEncoderParameter;

MemoryStream ms = new MemoryStream();
bitmap.Save(ms, myImageCodecInfo, myEncoderParameters);
dataStream = ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以
ms.Close();
return true;
}


public static void Compress(Bitmap bmp)
{
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;

myEncoder = System.Drawing.Imaging.Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 15L);
myEncoderParameters.Param[0] = myEncoderParameter;
}

public static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
public static void savePath(Bitmap bmp, string str)//保存路径
{
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;

myImageCodecInfo = GetEncoderInfo("image/jpeg");
myEncoder = System.Drawing.Imaging.Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 15L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp.Save(str, myImageCodecInfo, myEncoderParameters);
}
}
}

原文地址:https://www.cnblogs.com/ShenJA/p/14086464.html