using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Drawing; using System.Drawing.Imaging; namespace ConvertBKImg { public class CImageLibrary { public enum ValidateImageResult { OK, InvalidFileSize, InvalidImageSize } //检查图片大小 public static ValidateImageResult ValidateImage(string file, int MAX_FILE_SIZE, int MAX_WIDTH, int MAX_HEIGHT) { byte[] bs = File.ReadAllBytes(file); double size = (bs.Length / 1024); //大于50KB if (size > MAX_FILE_SIZE) return ValidateImageResult.InvalidFileSize; Image img = Image.FromFile(file); if (img.Width > MAX_WIDTH || img.Height > MAX_HEIGHT) return ValidateImageResult.InvalidImageSize; return ValidateImageResult.OK; } //彩图转灰图 public static void ToGray(ref Image imgSource) { Color c = new Color(); Bitmap b = new Bitmap(imgSource); int rr, gg, bb, cc; for (int i = 0; i < b.Width; i++) { for (int j = 0; j < b.Height; j++) { c = b.GetPixel(i, j); rr = c.R; gg = c.G; bb = c.B; cc = (int)((rr + gg + bb) / 3); if (cc < 0) cc = 0; if (cc > 255) cc = 255; //用FromArgb把整形转换成颜色值 Color c1 = Color.FromArgb(cc, cc, cc); b.SetPixel(i, j, c1); } imgSource = b; } } //按宽度比例缩小图片 public static Image GetOutputSizeImage(Image imgSource, int MAX_WIDTH) { Image imgOutput = imgSource; Size size = new Size(imgSource.Width, imgSource.Height); if (imgSource.Width <= 16 || imgSource.Height <= 16) return imgSource; //16X16大小的图片不转换 if (imgSource.Width > MAX_WIDTH || imgSource.Height > MAX_WIDTH) { double rate = MAX_WIDTH / (double)imgSource.Width; if (imgSource.Height * rate > MAX_WIDTH) rate = MAX_WIDTH / (double)imgSource.Height; size.Width = Convert.ToInt32(imgSource.Width * rate); size.Height = Convert.ToInt32(imgSource.Height * rate); imgOutput = imgSource.GetThumbnailImage(size.Width, size.Height, null, IntPtr.Zero); } return imgOutput; } //按比例缩小图片 public static Image GetOutputSizeImage(Image imgSource, Size outSize) { Image imgOutput = imgSource.GetThumbnailImage(outSize.Width, outSize.Height, null, IntPtr.Zero); return imgOutput; } /// <summary> /// 由图片文件转字节 /// </summary> public static byte[] GetImageBytes(string imageFileName) { Image img = Image.FromFile(imageFileName); return GetImageBytes(img); } /// <summary> /// 图片转字节 /// </summary> public static byte[] GetImageBytes(Image img) { if (img == null) return null; try { System.IO.MemoryStream ms = new MemoryStream(); img.Save(ms, ImageFormat.Jpeg); byte[] bs = ms.ToArray(); ms.Close(); return bs; } catch { return null; } } /// <summary> /// 字节转图片 /// </summary> public static Image FromBytes(byte[] bs) { if (bs == null) return null; try { MemoryStream ms = new MemoryStream(bs); Image returnImage = Image.FromStream(ms); ms.Close(); return returnImage; } catch { return null; } } /// <summary> /// 将其它格式的图片转为JPG文件 /// </summary> public static Image ToJPG(Image source) { //注意,先定义Bitmap类,否则会报A generic error occurred in GDI+ Bitmap bmp = new Bitmap(source); MemoryStream ms = new MemoryStream(); bmp.Save(ms, ImageFormat.Jpeg); return Bitmap.FromStream(ms); } /// <summary> /// 将其它格式的图片转为PNG文件 /// </summary> public static Image ToPNG(Image source) { //注意,先定义Bitmap类,否则会报A generic error occurred in GDI+ Bitmap bmp = new Bitmap(source); MemoryStream ms = new MemoryStream(); bmp.Save(ms, ImageFormat.Png); return FromBytes(ms.ToArray()); } //保存文件 public static void SaveFile(string fileName, Image source) { source.Save(fileName, source.RawFormat); } } }
浙公网安备 33010602011771号