/// <summary> /// /// </summary> /// <param name="im"></param> /// <returns></returns> private BitmapSource func_mi_回傳前壓縮圖片(ImageMagick.MagickImage im) { //2500 if (im.Width > M.b2.ActualWidth || im.Height > M.b2.ActualHeight) //縮小圖片後在載入 { using (ImageMagick.IMagickImage ii = im.Clone()) { //計算縮放比例 double d_縮放倍率 = 1; var w03 = M.b2.ActualWidth; var h03 = M.b2.ActualHeight; if (ii.Width / w03 > ii.Height / h03) { d_縮放倍率 = M.b2.ActualWidth / ii.Width; } else { d_縮放倍率 = M.b2.ActualHeight / ii.Height; } //縮放 var mg = new ImageMagick.MagickGeometry(); mg.Height = (int)(ii.Height * d_縮放倍率); mg.Width = (int)(ii.Width * d_縮放倍率); ii.Resize(mg); return(ii.ToBitmapSource()); } } else { return(im.ToBitmapSource()); } }
/// <summary> /// Constructor for converting ImageMagick.MagickGeometry and Gravity to this format. /// </summary> public Geometry(ImageMagick.MagickGeometry mGeo, ImageMagick.Gravity gravity = ImageMagick.Gravity.Undefined) : this(mGeo.X, mGeo.Y, mGeo.Width, mGeo.Height, gravity.ToAnchor()) { }
public async Task <HttpResponseMessage> DownloadByAbsouteFilePath(string FileType, string FilePath = "") { return(await Task.Run <HttpResponseMessage>(async() => { HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); #region 获取解析 System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"(?<FilePath>.*[.jpg|.png|.gif|.jpeg|.cab|.apk])"); var match = reg.Match(FilePath); if (match.Success) { FilePath = match.Groups["FilePath"].Value; } reg = new System.Text.RegularExpressions.Regex(@"[0-9]+X[0-9]+"); match = reg.Match(FilePath); var ResizeCMD = ""; if (match.Success) { ResizeCMD = match.Value; } #endregion if (XuHos.Common.Storage.Manager.Instance.Exists(FileType, FilePath)) { //不需要缩放 if (!string.IsNullOrEmpty(ResizeCMD)) { //E:\XXX\XXX.80X80.jpg var resizeImgOtputPath = string.Format("{0}.{1}", FilePath, ResizeCMD); if (XuHos.Common.Storage.Manager.Instance.Exists(FileType, resizeImgOtputPath)) { result.Content = new StreamContent(await XuHos.Common.Storage.Manager.Instance.OpenFile(FileType, resizeImgOtputPath)); } else { var stream = await XuHos.Common.Storage.Manager.Instance.OpenFile(FileType, FilePath); using (ImageMagick.MagickImage image = new ImageMagick.MagickImage(stream)) { ImageMagick.MagickGeometry size = new ImageMagick.MagickGeometry(ResizeCMD); image.Resize(size); var resizeStream = new System.IO.MemoryStream(); image.Write(resizeStream); await XuHos.Common.Storage.Manager.Instance.WriteFile(FileType, resizeImgOtputPath, resizeStream); result.Content = new ByteArrayContent(image.ToByteArray()); } } } else { result.Content = new StreamContent(await XuHos.Common.Storage.Manager.Instance.OpenFile(FileType, FilePath)); } result.Headers.CacheControl = new CacheControlHeaderValue(); result.Headers.CacheControl.Public = true; result.Headers.CacheControl.MaxAge = TimeSpan.FromHours(480); result.Content.Headers.ContentType = new MediaTypeHeaderValue("Store/octet-stream"); result.Content.Headers.Expires = DateTimeOffset.Now.AddDays(20); } else { result.StatusCode = HttpStatusCode.NotFound; } return result; })); }
// Additional constructors for conversion. /// <summary> /// Constructor for converting ImageMagick.MagickGeometry to this format. /// </summary> public Geometry(ImageMagick.MagickGeometry mGeo, Anchor anchor = Anchor.Undefined) : this(mGeo.X, mGeo.Y, mGeo.Width, mGeo.Height, anchor) { }
public async Task <HttpResponseMessage> Download( string FileType, string ResourceID, string ResizeCMD = "") { return(await Task.Run <HttpResponseMessage>(async() => { HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); SysFileIndexService fileService = new SysFileIndexService(CurrentOperatorUserID); SysFileIndex fileIndex = null; #region 修正命令 if (!string.IsNullOrEmpty(ResizeCMD) && !ResizeCMD.ToUpper().Contains("X")) { ResourceID = ResourceID + "." + ResizeCMD; ResizeCMD = ""; } #endregion ResourceID = ResourceID.ToUpper(); #region 从缓存中获取,如果不存在则重建缓存 var fileIndexCacheKey = new XuHos.Common.Cache.Keys.EntityCacheKey <SysFileIndex>(StringCacheKeyType.SysFileIndex, ResourceID); //获取缓存中的数据 fileIndex = fileIndexCacheKey.FromCache(); //从数据库中重建索引 if (fileIndex == null) { if (ResourceID.Length == 32) { fileIndex = fileService.Single <SysFileIndex>(a => a.MD5 == ResourceID && a.FileType == FileType); } else { fileIndex = fileService.Single <SysFileIndex>(a => a.FileUrl == ResourceID && a.FileType == FileType); } if (fileIndex != null) { fileIndex.ToCache(fileIndexCacheKey, TimeSpan.FromHours(2)); } } #endregion if (fileIndex != null) { string etag = string.Format("\"{0}\"", fileIndex.MD5); var tag = Request.Headers.IfNoneMatch.FirstOrDefault(); if (Request.Headers.IfModifiedSince.HasValue && tag != null && tag.Tag == etag) { result.StatusCode = HttpStatusCode.NotModified; } else { #region 重新读取文件 if (XuHos.Common.Storage.Manager.Instance.Exists(FileType, fileIndex.FileUrl)) { #region 文件存在 //不需要缩放 if (!string.IsNullOrEmpty(ResizeCMD) && FileType.ToLower() == "images") { //80X80 统一成小写 Exists 的时候 不区分大小,但是OpenFile确区分大小写 ResizeCMD = ResizeCMD.ToLower(); //E:\XXX\XXX.80X80.jpg var resizeImgOtputPath = string.Format("{0}.{1}", fileIndex.FileUrl, ResizeCMD); if (XuHos.Common.Storage.Manager.Instance.Exists(FileType, resizeImgOtputPath)) { var stream = await XuHos.Common.Storage.Manager.Instance.OpenFile(FileType, resizeImgOtputPath); result.Content = new StreamContent(stream); } else { var stream = await XuHos.Common.Storage.Manager.Instance.OpenFile(FileType, fileIndex.FileUrl); using (ImageMagick.MagickImage image = new ImageMagick.MagickImage(stream)) { ImageMagick.MagickGeometry size = new ImageMagick.MagickGeometry(ResizeCMD); image.Resize(size); var resizeStream = new System.IO.MemoryStream(); image.Write(resizeStream); await XuHos.Common.Storage.Manager.Instance.WriteFile(FileType, resizeImgOtputPath, resizeStream); result.Content = new ByteArrayContent(image.ToByteArray()); } } } else { var stream = await XuHos.Common.Storage.Manager.Instance.OpenFile(FileType, fileIndex.FileUrl); result.Content = new StreamContent(stream); } #endregion result.Content.Headers.ContentType = new MediaTypeHeaderValue("Store/octet-stream"); result.Content.Headers.Add("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileIndex.Remark) + "\""); result.Headers.ETag = new EntityTagHeaderValue(etag); result.Headers.CacheControl = new CacheControlHeaderValue(); result.Headers.CacheControl.Public = true; result.Headers.CacheControl.MaxAge = TimeSpan.FromHours(480); result.Content.Headers.Expires = DateTimeOffset.Now.AddDays(20); result.Content.Headers.LastModified = fileIndex.CreateTime; } else { result.StatusCode = HttpStatusCode.NotFound; } #endregion } } else { result.StatusCode = HttpStatusCode.NotFound; } return result; })); }