111,113
社区成员




//压缩图片
//图片压缩 如果图片大于100k,那么压缩图片。
/// <summary>
/// 传入值 Oracle中的byte[]图片
/// 返回值 压缩后的byte[]图片 jpg格式,100k以下
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public byte[] CompressPic(byte[] data)
{
#region 原始
MemoryStream ms = new MemoryStream();
ms.Write(data, 0, data.Length); //byte[]写入到ms中
Bitmap bitmap = new Bitmap(ms); //从ms流得到图片 3M的时候提示参数无效 391万,
//如果图片长或宽超过6.5万个像素,就会报错.即 图片的像素个数不能超过42.25万。400kb
string curdir = System.Windows.Forms.Application.StartupPath + "temp.jpg";
bitmap.Save(curdir, System.Drawing.Imaging.ImageFormat.Jpeg); //存成temp.jpg,减小图片
FileStream fs = new FileStream(curdir, FileMode.Open, FileAccess.Read); // /fs从.jpg 生成流
while (fs.Length > 100000) //文件的大小是否大于100k
{
//bitmap = new Bitmap(curdir); //获取硬盘jpg 原始图片
bitmap = new Bitmap(fs);//从fs获取大图
Bitmap newmap = new Bitmap(Convert.ToInt32(bitmap.Width * 0.8), Convert.ToInt32(bitmap.Height * 0.8)); //宽高缩小为原来的0.8
Graphics g = Graphics.FromImage(newmap);
Rectangle orinrec = new Rectangle(0, 0, bitmap.Width, bitmap.Height); //原始图片范围
Rectangle newrec = new Rectangle(0, 0, newmap.Width, newmap.Height);
g.DrawImage(bitmap, newrec, orinrec, GraphicsUnit.Pixel);
bitmap.Dispose();
fs.Dispose();
newmap.Save(curdir, System.Drawing.Imaging.ImageFormat.Jpeg);
fs = new FileStream(curdir, FileMode.Open, FileAccess.Read);
}
byte[] result = new byte[fs.Length];
SafeRead(fs, result);
fs.Dispose(); //fs释放 .jpg
bitmap.Dispose();
File.Delete(curdir);
return result;
#endregion