c# - 从图像创建缩略图
问题描述
我有这个接收图像并将其保存到数据库的方法:
public void AttachImage(Guid id, Stream imageStream, string imageName)
{
Post post = GetPost(id);
if (post.HasImage())
{
_gridFS.Delete(new ObjectId(post.ImageId));
}
ObjectId imageId = _gridFS.UploadFromStream(imageName, imageStream);
post.ImageId = imageId.ToString();
var filter = Builders<Post>.Filter.Eq(x => x.Id, id);
var update = Builders<Post>.Update.Set("ImageId", post.ImageId);
_posts.UpdateOne(filter, update);
}
现在我不知道该怎么做,而是将其缩小到缩略图大小。大小应该是自动的,我不能将它设置为例如400x400
如果图像是1920x1080
.
解决方案
如何保持纵横比而不低于一定尺寸
首先计算源图像的纵横比,比如 w/h,或者 1920/1080 = 1.77。然后取你的目标尺寸,比如 400x300 并计算图像应该有多大。您可以根据宽度或高度执行此操作:
- 300 * 1.77 => 533x300
- 400 / 1.77 => 400x225
根据源纵横比是否大于目标纵横比,静态或动态选择其中之一。如果生成的尺寸大于目标,则图像将被裁剪,如果较小,则会有空白区域。
如何将图像缩小为缩略图。
一旦你知道图像应该有什么尺寸,这个答案就会解释如何缩放图像。
推荐阅读
- java - Spock 中 TestNG 数据提供者的模拟
- python - 将 url 正则表达式转换为 django 2.1 中的路径
- html - 如何在 HTML 表中重复数据库中的每个项目?
- javascript - 打字稿递归函数组合
- ms-access - VBA Scipting FileSystemObject returning different time
- python - PyQt5:创建强制固定高度的流布局
- ssl - 带有 tls 主机的 k8s 入口多个
- mysql - MySQL INNER JOIN 结果每列有 2 个
- javascript - JS Array.push only when Promise resolved
- go - Text rotation in go- go chart library