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.

69 lines
2.4 KiB

1 year ago
  1. using Common.Model;
  2. using System;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.IO;
  6. namespace Repository
  7. {
  8. public class CompressImageDao : Dao
  9. {
  10. public bool CompressImageAndSave(long contentLength, string fileToCompress, string compressedFile)
  11. {
  12. try
  13. {
  14. var original = Image.FromFile(fileToCompress);
  15. ImageCodecInfo jpgEncoder = null;
  16. ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
  17. foreach (ImageCodecInfo codec in codecs)
  18. {
  19. if (codec.FormatID == ImageFormat.Jpeg.Guid)
  20. {
  21. jpgEncoder = codec;
  22. break;
  23. }
  24. }
  25. if (jpgEncoder != null)
  26. {
  27. var encoder = Encoder.Quality;
  28. var encoderParameters = new EncoderParameters(1);
  29. var suggestedImage = GetSuggestedImage(contentLength, original.Height, original.Width);
  30. var encoderParameter = new EncoderParameter(encoder, long.Parse(suggestedImage.Id));
  31. encoderParameters.Param[0] = encoderParameter;
  32. FileStream ms = new FileStream(compressedFile, FileMode.Create, FileAccess.ReadWrite);
  33. try
  34. {
  35. original.Save(ms, jpgEncoder, encoderParameters);
  36. }
  37. catch (Exception ex)
  38. {
  39. }
  40. finally
  41. {
  42. ms.Flush();
  43. ms.Close();
  44. original.Dispose();
  45. if (File.Exists(fileToCompress))
  46. File.Delete(fileToCompress);
  47. }
  48. }
  49. return true;
  50. }
  51. catch (Exception ex)
  52. {
  53. return false;
  54. }
  55. }
  56. public DbResult GetSuggestedImage(long imageSize, int height, int width)
  57. {
  58. string sql = "EXEC proc_getSuggestedImage @flag=si";
  59. sql += ", @imgActualSize = " + FilterString(imageSize.ToString());
  60. sql += ", @imgActualHight = " + FilterString(height.ToString());
  61. sql += ", @imgActualWidth = " + FilterString(width.ToString());
  62. return ParseDbResult(sql);
  63. }
  64. }
  65. }