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;
}
}
}