图片上传压缩
/// <summary>
/// 统一保存文件
/// </summary>
private void FileSave(HttpContext context, HttpPostedFile upFiles, bool isWater)
{
if (upFiles == null)
{
showError(context, "请选择要上传文件!");
return;
}
//检查是否允许匿名上传
/*if (sysConfig.fileanonymous == 0 && !new ManagePage().IsAdminLogin() && !new BasePage().IsUserLogin())
{
showError(context, "禁止匿名非法上传!");
return;
}*/
//获取文件信息
string fileName = upFiles.FileName;
byte[] byteData = FileHelper.ConvertStreamToByteBuffer(upFiles.InputStream); //获取文件流
//开始上传
string remsg = new UpLoad().FileSaveAs(byteData, fileName, false, isWater);
Dictionary<string, object> dic = JsonHelper.DataRowFromJSON(remsg);
string status = dic["status"].ToString();
string msg = dic["msg"].ToString();
if (status == "0")
{
showError(context, msg);
return;
}
string filePath = dic["path"].ToString(); //取得上传后的路径
string filePath1 = filePath.Substring(0,filePath.LastIndexOf("."))+"1"+filePath.Substring(filePath.LastIndexOf("."), filePath.Length - filePath.LastIndexOf("."));
//Bitmap bitmap=BitmapFactory.decodeFile(filePath);
//tools.upload_ajax tu = new tools.upload_ajax();
//tu.Compress(bitmap, filePath1, 50);
Bitmap bmp = new Bitmap(filePath);
//ystp(urlConvertorLocal(filePath), urlConvertorLocal(filePath1));
Compress(bmp, urlConvertorLocal(filePath1), 50L);
showSuccess(context, fileName, filePath1); //输出成功提示
}
/// <summary>
/// 相对路径转绝对路径
/// </summary>
/// <param name="strUrl"></param>
/// <returns></returns>
private string urlConvertorLocal(string strUrl)
{
string tmpRootDir = HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
string urlPath = tmpRootDir + strUrl.Replace(@"/", @"/"); //转换成绝对路径
return urlPath;
}
#region 图片压缩
/// <summary>
/// 图片压缩(降低质量以减小文件的大小)
/// </summary>
/// <param name="srcBitMap">传入的Bitmap对象</param>
/// <param name="destFile">压缩后的图片保存路径</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
public static void Compress(Bitmap srcBitMap, string destFile, long level)
{
Stream s = new FileStream(destFile, FileMode.Create);
Compress(srcBitMap, s, level);
s.Close();
}
/// <summary>
/// 编码信息
/// </summary>
/// <param name="mimeType"></param>
/// <returns></returns>
private 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;
}
/// <summary>
/// 图片压缩(降低质量以减小文件的大小)
/// </summary>
/// <param name="srcBitmap">传入的Bitmap对象</param>
/// <param name="destStream">压缩后的Stream对象</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
private static void Compress(Bitmap srcBitmap, Stream destStream, long level)
{
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
// Get an ImageCodecInfo object that represents the JPEG codec.
myImageCodecInfo = GetEncoderInfo("image/jpeg");
// Create an Encoder object based on the GUID
// for the Quality parameter category.
myEncoder = System.Drawing.Imaging.Encoder.Quality;
// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one
// EncoderParameter object in the array.
myEncoderParameters = new EncoderParameters(1);
// Save the bitmap as a JPEG file with 给定的 quality level
myEncoderParameter = new EncoderParameter(myEncoder, level);
myEncoderParameters.Param[0] = myEncoderParameter;
srcBitmap.Save(destStream, myImageCodecInfo, myEncoderParameters);
}
#endregion