using Common.Model; using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace Repository { public class CompressImageDao : Dao { public bool CompressImageAndSave(long contentLength, string fileToCompress, string compressedFile) { try { var original = Image.FromFile(fileToCompress); ImageCodecInfo jpgEncoder = null; ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); foreach (ImageCodecInfo codec in codecs) { if (codec.FormatID == ImageFormat.Jpeg.Guid) { jpgEncoder = codec; break; } } if (jpgEncoder != null) { var encoder = Encoder.Quality; var encoderParameters = new EncoderParameters(1); var suggestedImage = GetSuggestedImage(contentLength, original.Height, original.Width); var encoderParameter = new EncoderParameter(encoder, long.Parse(suggestedImage.Id)); encoderParameters.Param[0] = encoderParameter; FileStream ms = new FileStream(compressedFile, FileMode.Create, FileAccess.ReadWrite); try { original.Save(ms, jpgEncoder, encoderParameters); } catch (Exception ex) { } finally { ms.Flush(); ms.Close(); original.Dispose(); if (File.Exists(fileToCompress)) File.Delete(fileToCompress); } } return true; } catch (Exception ex) { return false; } } public DbResult GetSuggestedImage(long imageSize, int height, int width) { string sql = "EXEC proc_getSuggestedImage @flag=si"; sql += ", @imgActualSize = " + FilterString(imageSize.ToString()); sql += ", @imgActualHight = " + FilterString(height.ToString()); sql += ", @imgActualWidth = " + FilterString(width.ToString()); return ParseDbResult(sql); } } }