如何生成这样的缩略图

clefoo 2014-03-26 10:09:40
原图:

缩略图:

非网络上流传的等比例缩放,这个可以实现窃取掉一部分图片,有什么办法实现呢?
...全文
620 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
木子木啊 2014-03-27
  • 打赏
  • 举报
回复
这个好牛叉啊。。 真的可以这样实现吗?
  • 打赏
  • 举报
回复
其实还是按宽或高(看是竖形还是横幅的) 等比例缩放 然后将过长或过宽的那一部分剪掉
ltj026 2014-03-27
  • 打赏
  • 举报
回复
protected virtual Size CalculateDimensions(Size originalSize, int targetSize) { var newSize = new Size(); if (originalSize.Height > originalSize.Width) // portrait { newSize.Width = (int)(originalSize.Width * (float)(targetSize / (float)originalSize.Height)); newSize.Height = targetSize; } else // landscape or square { newSize.Height = (int)(originalSize.Height * (float)(targetSize / (float)originalSize.Width)); newSize.Width = targetSize; } return newSize; } public void NewPicture(byte[] PictureBinary, int offsetX = 0, int offsetY = 0, int targetSize = 0, double matrix = 1) { var picStream = new MemoryStream(PictureBinary); var picBit = new Bitmap(picStream); var newSize = CalculateDimensions(picBit.Size, targetSize); if (newSize.Width < 1) newSize.Width = 1; if (newSize.Height < 1) newSize.Height = 1; var newBitMap = new Bitmap(200, 200);//the new picture size var g = Graphics.FromImage(newBitMap); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; g.DrawImage(picBit, offsetX, offsetY, newSize.Width, newSize.Height); string localFilename = string.Format("{0}_{1}.{2}", picture.Id.ToString("10000000"), "combine", lastPart); var ici = GetImageCodecInfoFromExtension(lastPart) ?? GetImageCodecInfoFromMimeType("image/jpeg"); var ep = new EncoderParameters(); ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, this.ImageQuality); newBitMap.Save(Path.Combine(this.LocalThumbImagePath, localFilename), ici, ep); newBitMap.Dispose(); picBit.Dispose(); }
insus 2014-03-27
  • 打赏
  • 举报
回复
本拉灯 2014-03-26
  • 打赏
  • 举报
回复
用Bitmap.Clone(x,y,width,height)就可以
threenewbee 2014-03-26
  • 打赏
  • 举报
回复
伪代码: double 高宽比 = 3.0 / 4.0; if (图片原始的宽 / 高宽比 > 原始图片的高) { // 图片过扁,那么用图片的高,并且切掉左右多余的部分 Rect r; r.Left = (图片原始的宽 - 图片原始的高 * 高宽比) / 2 r.Top = 0 r.Width = 图片原始的高 * 高宽比 r.Height = 原始图片的高 将这个区域的图片缩放 } else { // 图片过瘦,那么用图片的宽,并且切掉上下多于的部分 ... }

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧