PageRenderTime 57ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/ImageData/Image.cs

https://bitbucket.org/rbhakser/bvcms
C# | 184 lines | 180 code | 4 blank | 0 comment | 26 complexity | 2ff2de041bd9b9b0680ccd7744ba7bc5 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, Apache-2.0, BSD-3-Clause, AGPL-3.0, MPL-2.0-no-copyleft-exception
  1. using System;
  2. using System.Linq;
  3. using System.Data.Linq;
  4. using System.IO;
  5. using Drawing = System.Drawing;
  6. using System.Drawing.Imaging;
  7. using UtilityExtensions;
  8. using System.Text.RegularExpressions;
  9. namespace ImageData
  10. {
  11. public partial class Image
  12. {
  13. public static Image NewImageFromBits(byte[] bits, int w, int h)
  14. {
  15. var i = new Image();
  16. i.LoadResizeFromBits(bits, w, h);
  17. DbUtil.Db.Images.InsertOnSubmit(i);
  18. DbUtil.Db.SubmitChanges();
  19. return i;
  20. }
  21. public static Image NewImageFromImage(Image i, int w, int h)
  22. {
  23. var i2 = new Image();
  24. i2.LoadResizeFromBits(i.Bits, w, h);
  25. return i2;
  26. }
  27. private void LoadResizeFromBits(byte[] bits, int w, int h)
  28. {
  29. var istream = new MemoryStream(bits);
  30. var img1 = Drawing.Image.FromStream(istream);
  31. var ratio = Math.Min(w / (double)img1.Width, h / (double)img1.Height);
  32. if (ratio >= 1) // image is smaller than requested
  33. ratio = 1; // same size
  34. w = Convert.ToInt32(ratio * img1.Width);
  35. h = Convert.ToInt32(ratio * img1.Height);
  36. var img2 = new Drawing.Bitmap(img1, w, h);
  37. var ostream = new MemoryStream();
  38. img2.Save(ostream, ImageFormat.Jpeg);
  39. Bits = ostream.GetBuffer();
  40. Length = Bits.Length;
  41. img1.Dispose();
  42. img2.Dispose();
  43. istream.Close();
  44. ostream.Close();
  45. }
  46. public static Image NewTextFromString(string s)
  47. {
  48. var i = new Image();
  49. i.Mimetype = "text/plain";
  50. i.Bits = System.Text.Encoding.ASCII.GetBytes(s);
  51. i.Length = i.Bits.Length;
  52. DbUtil.Db.Images.InsertOnSubmit(i);
  53. DbUtil.Db.SubmitChanges();
  54. return i;
  55. }
  56. public void SetText(string s)
  57. {
  58. Mimetype = "text/plain";
  59. Bits = System.Text.Encoding.ASCII.GetBytes(s);
  60. Length = Bits.Length;
  61. }
  62. public static Image NewTextFromBits(byte[] bits)
  63. {
  64. var i = new Image();
  65. i.Mimetype = "text/plain";
  66. i.Bits = bits;
  67. i.Length = i.Bits.Length;
  68. DbUtil.Db.Images.InsertOnSubmit(i);
  69. DbUtil.Db.SubmitChanges();
  70. return i;
  71. }
  72. public static Image NewImageFromBits(byte[] bits)
  73. {
  74. var i = new Image();
  75. i.LoadImageFromBits(bits);
  76. DbUtil.Db.Images.InsertOnSubmit(i);
  77. DbUtil.Db.SubmitChanges();
  78. return i;
  79. }
  80. public static Image UpdateImageFromBits( int imageID, byte[] bits )
  81. {
  82. var i = from t in DbUtil.Db.Images
  83. where t.Id == imageID
  84. select t;
  85. var ii = i.FirstOrDefault();
  86. if (ii != null)
  87. ii.LoadImageFromBits(bits);
  88. DbUtil.Db.SubmitChanges();
  89. return ii;
  90. }
  91. private void LoadImageFromBits(byte[] bits)
  92. {
  93. var istream = new MemoryStream(bits);
  94. var img1 = Drawing.Image.FromStream(istream);
  95. var img2 = new Drawing.Bitmap(img1, img1.Width, img1.Height);
  96. var ostream = new MemoryStream();
  97. img2.Save(ostream, ImageFormat.Jpeg);
  98. Mimetype = "image/jpeg";
  99. Bits = ostream.GetBuffer();
  100. Length = Bits.Length;
  101. img1.Dispose();
  102. img2.Dispose();
  103. istream.Close();
  104. ostream.Close();
  105. }
  106. public static Image NewImageFromBits(byte[] bits, string type)
  107. {
  108. var i = new Image();
  109. i.LoadFromBits(bits, type);
  110. DbUtil.Db.Images.InsertOnSubmit(i);
  111. DbUtil.Db.SubmitChanges();
  112. return i;
  113. }
  114. private void LoadFromBits(byte[] bits, string type)
  115. {
  116. Bits = bits;
  117. Length = Bits.Length;
  118. Mimetype = type;
  119. }
  120. public static void DeleteOnSubmit(int? imageid)
  121. {
  122. var i = DbUtil.Db.Images.SingleOrDefault(img => img.Id == imageid);
  123. if (i == null)
  124. return;
  125. DbUtil.Db.Images.DeleteOnSubmit(i);
  126. }
  127. public bool HasMedical() // special function
  128. {
  129. var line = Medical();
  130. if (!line.HasValue())
  131. return false;
  132. if (line.ToLower().Contains("none"))
  133. return false;
  134. if (line.ToLower().Contains("n/a"))
  135. return false;
  136. if (line.ToLower().Contains("nka"))
  137. return false;
  138. return line.HasValue();
  139. }
  140. public string Medical() // special function
  141. {
  142. if (Mimetype != "text/plain")
  143. return null;
  144. var t = System.Text.ASCIIEncoding.ASCII.GetString(Bits);
  145. var q = from li in t.SplitStr("\r\n")
  146. where li.StartsWith("Medical:")
  147. select li;
  148. if (q.Count() == 0)
  149. return null;
  150. var a = q.First().Split(':');
  151. return a[1].Trim();
  152. }
  153. public bool InterestedInCoaching() // special function
  154. {
  155. if (Mimetype != "text/plain")
  156. return false;
  157. var t = System.Text.ASCIIEncoding.ASCII.GetString(Bits);
  158. var q = from li in t.SplitStr("\r\n")
  159. where li.StartsWith("<tr><td>Coaching:")
  160. select li;
  161. if (q.Count() == 0)
  162. return false;
  163. var s = q.First();
  164. return Regex.IsMatch(s, @"\A(?:<tr><td>.*</td><td>(1|true)</td></tr>)\Z", RegexOptions.IgnoreCase);
  165. }
  166. public static string Content(int id)
  167. {
  168. var img = DbUtil.Db.Images.SingleOrDefault(i => i.Id == id);
  169. if (img == null || img.Mimetype != "text/plain")
  170. return null;
  171. return System.Text.ASCIIEncoding.ASCII.GetString(img.Bits);
  172. }
  173. public override string ToString()
  174. {
  175. if (this.Mimetype != "text/plain")
  176. return null;
  177. return System.Text.ASCIIEncoding.ASCII.GetString(Bits);
  178. }
  179. }
  180. }