using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
namespace Siia.CarParts.UI.Common
{
public class ImageHelper
{
public static bool GetPicThumbnail(
string sFile,
string outPath,
int flag)
{
string domainPath =
HttpRuntime.AppDomainAppPath.ToString();
string fileName = sFile.Split(
'/').Last();
string filePath = Path.GetFullPath(domainPath +
sFile);
string zipPath = Path.GetFullPath(domainPath + outPath +
"\\zip");
byte[] bs =
File.ReadAllBytes(filePath);
double size = (bs.Length /
1024);
if (size <
1024)
return true;
System.Drawing.Image iSource =
System.Drawing.Image.FromFile(filePath);
ImageFormat tFormat =
iSource.RawFormat;
//以下代码为保存图片时,设置压缩质量
EncoderParameters ep =
new EncoderParameters();
long[] qy =
new long[
1];
qy[0] = flag;
//设置压缩的比例1-100
EncoderParameter eParam =
new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[0] =
eParam;
try
{
ImageCodecInfo[] arrayICI =
ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo =
null;
for (
int x =
0; x < arrayICI.Length; x++
)
{
if (arrayICI[x].FormatDescription.Equals(
"JPEG"))
{
jpegICIinfo =
arrayICI[x];
break;
}
}
if (jpegICIinfo !=
null)
{
if (!
Directory.Exists(zipPath))
{
Directory.CreateDirectory(zipPath);
}
iSource.Save(zipPath+
"\\"+fileName, jpegICIinfo, ep);
//outPath是压缩后的新路径
}
//else
//{
// iSource.Save(outPath, tFormat);
//}
return true;
}
catch
{
return false;
}
finally
{
iSource.Dispose();
iSource.Dispose();
string sourceFile = zipPath +
"\\" +
fileName;
//覆盖源文件
if (System.IO.File.Exists(sourceFile))
{
System.IO.File.Copy(sourceFile, filePath, true);
}
}
}
/// <summary>
/// 图像缩略图处理
/// </summary>
/// <param name="bytes">图像源数据</param>
/// <param name="compression">压缩质量 1-100</param>
/// <param name="thumbWidth">缩略图的宽</param>
/// <param name="thumbHeight">缩略图的高</param>
/// <returns></returns>
public static byte[] ConvertToThumbnail(
byte[] bytes,
int compression =
100,
int thumbWidth =
0,
int thumbHeight =
0)
{
byte[] bs =
null;
try
{
if (bytes !=
null)
{
using (MemoryStream ms =
new MemoryStream(bytes))
{
using (Bitmap srcimg =
new Bitmap(ms))
{
if (thumbWidth ==
0 && thumbHeight ==
0)
{
thumbWidth =
srcimg.Width;
thumbHeight =
srcimg.Height;
}
using (Bitmap dstimg =
new Bitmap(thumbWidth, thumbHeight))
//图片压缩质量
{
//从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。
using (Graphics gr =
Graphics.FromImage(dstimg))
{
//把原始图像绘制成上面所设置宽高的缩小图
Rectangle rectDestination =
new Rectangle(
0,
0, thumbWidth, thumbHeight);
gr.Clear(Color.WhiteSmoke);
gr.CompositingQuality =
CompositingQuality.HighQuality;
gr.SmoothingMode =
SmoothingMode.HighQuality;
gr.InterpolationMode =
InterpolationMode.HighQualityBicubic;
gr.DrawImage(srcimg, rectDestination, 0,
0, srcimg.Width, srcimg.Height, GraphicsUnit.Pixel);
EncoderParameters ep =
new EncoderParameters(
1);
ep.Param[0] =
new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);
//设置压缩的比例1-100
ImageCodecInfo[] arrayICI =
ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo = arrayICI.FirstOrDefault(t => t.FormatID ==
System.Drawing.Imaging.ImageFormat.Png.Guid);
using (MemoryStream dstms =
new MemoryStream())
{
if (jpegICIinfo !=
null)
{
dstimg.Save(dstms, jpegICIinfo, ep);
}
else
{
dstimg.Save(dstms, System.Drawing.Imaging.ImageFormat.Png);//保存到内存里
}
bs =
new Byte[dstms.Length];
dstms.Position =
0;
dstms.Read(bs, 0, bs.Length);
}
}
}
}
}
}
}
catch (Exception ex)
{
//LogManager.DefaultLogger.Error(LogConvert.ParseWebEx(ex), string.Concat("ConvertToThumbnail error.", thumbWidth, " ", thumbHeight));
}
return bs;
}
}
}
转载于:https://www.cnblogs.com/SmilePastaLi/p/7600594.html
相关资源:C# .Net压缩图片,大小仅为原图的1/10