首页 > 解决方案 > 从图像创建缩略图

问题描述

我有这个接收图像并将其保存到数据库的方法:

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.

标签: c#mongodb

解决方案


如何保持纵横比而不低于一定尺寸

首先计算源图像的纵横比,比如 w/h,或者 1920/1080 = 1.77。然后取你的目标尺寸,比如 400x300 并计算图像应该有多大。您可以根据宽度或高度执行此操作:

  • 300 * 1.77 => 533x300
  • 400 / 1.77 => 400x225

根据源纵横比是否大于目标纵横比,静态或动态选择其中之一。如果生成的尺寸大于目标,则图像将被裁剪,如果较小,则会有空白区域。

如何将图像缩小为缩略图。

一旦你知道图像应该有什么尺寸,这个答案就会解释如何缩放图像。


推荐阅读