You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

70 lines
2.4 KiB

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