using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;namespace Publics{ public class ImgHelper { public static void AdjustPhoto(int toWidth, int toHeight, string filePath, string fromFileName, string toFileName, int maxWidth, int maxHeight) { Image originalImage = Image.FromFile(filePath + "/" + fromFileName); // If the size is not enough, go back and save the original image if (originalImage.Width < toWidth && originalImage.Height < toHeight) { originalImage.Save(filePath + "/" + toFileName); originalImage.Dispose(); return; } // Gets the area where the new image is taken from the original image based on the image size int x, y, w, h; if (toHeight > 0) { if (toWidth > 0) { if (originalImage.Width > toWidth && originalImage.Height > toHeight) { w = toWidth; h = toWidth * originalImage.Height / originalImage.Width; if (h > toHeight) { h = toHeight; w = toHeight * originalImage.Width / originalImage.Height; x = (toWidth - w) / 2; y = 0; } else { x = 0; y = (toHeight - h) / 2; } } else if (originalImage.Width > toWidth) { w = toWidth; h = toWidth * originalImage.Height / originalImage.Width; x = 0; y = (toHeight - h) / 2; } else if (originalImage.Height > toHeight) { h = toHeight; w = toHeight * originalImage.Width / originalImage.Height; x = (toWidth - w) / 2; y = 0; } else { w = originalImage.Width; h = originalImage.Height; x = (toWidth - w) / 2; y = (toHeight - h) / 2; } } else { if (originalImage.Height > maxHeight) { toWidth = toHeight * originalImage.Width / originalImage.Height; x = 0; y = 0; w = toWidth; h = toHeight; } else { x = 0; y = 0; w = originalImage.Width; h = originalImage.Height; toWidth = originalImage.Width; toHeight = originalImage.Height; } } } else { if (originalImage.Width > maxWidth) { toHeight = toWidth * originalImage.Height / originalImage.Width; x = 0; y = 0; w = toWidth; h = toHeight; } else { x = 0; y = 0; w = originalImage.Width; h = originalImage.Height; toWidth = originalImage.Width; toHeight = originalImage.Height; } } Bitmap bm = new Bitmap(toWidth, toHeight); Graphics g = Graphics.FromImage(bm); g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.Clear(Color.White); g.DrawImage(originalImage, new Rectangle(x, y, w, h), 0, 0, originalImage.Width, originalImage.Height, GraphicsUnit.Pixel); long[] quality = new long[1]; quality[0] = 80; EncoderParameters encoderParams = new EncoderParameters(); EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, quality); encoderParams.Param[0] = encoderParam; ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();// Gets containing information about the built-in image codec ImageCodecInfo Object. ImageCodecInfo jpegICI = null; for (int i = 0; i < arrayICI.Length; i++) { if (arrayICI[i].FormatDescription.Equals("JPEG")) { jpegICI = arrayICI[i];// Set up the JPEG coding break; } } if (jpegICI != null) { //bm.Save(Server.MapPath(path + "/thumb_" + filename), jpegICI, encoderParams); bm.Save(filePath + "/" + toFileName, jpegICI, encoderParams); } bm.Dispose(); originalImage.Dispose(); g.Dispose(); } /// <summary> /// Easy algorithm for keeping scale image /// </summary> /// <param name="spcWidth"></param> /// <param name="spcHeight"></param> /// <param name="orgWidth"></param> /// <param name="orgHeight"></param> /// <returns></returns> public static Dictionary<string, int> AdjustSize(int spcWidth, int spcHeight, int orgWidth, int orgHeight) { Dictionary<string, int> size = new Dictionary<string, int>(); // The original width and height are not processed within the specified width and height range if (orgWidth <= spcWidth && orgHeight <= spcHeight) { size["Width"] = orgWidth; size["Height"] = orgHeight; } else { // Obtain proportionality coefficient float w = orgWidth / (float)spcWidth; float h = orgHeight / (float)spcHeight; // The width ratio is greater than the height ratio if (w > h) { size["Width"] = spcWidth; size["Height"] = (int)(w >= 1 ? Math.Round(orgHeight / w) : Math.Round(orgHeight * w)); } // The width ratio is less than the height ratio else if (w < h) { size["Height"] = spcHeight; size["Width"] = (int)(h >= 1 ? Math.Round(orgWidth / h) : Math.Round(orgWidth * h)); } // The ratio of width is equal to the ratio of height else { size["Width"] = spcWidth; size["Height"] = spcHeight; } } return size; } }}