首页 > 其他分享 >通过图片流来返回图片

通过图片流来返回图片

时间:2023-06-05 11:45:38浏览次数:45  
标签:返回 Image 通过 接口 token image 图片

通过图片流来返回图片

前言

之前写了个图片接口,然后做了个授权,但是光返回图片地址虽然能适应大部分需求,但是考虑到有些人不想去处理返回值,也是做了个直接返回图片流的接口。

接口展示

返回指定宽度和高度图片流

image

直接返回原图

image

接口实现

Service层

如何返回图片流给前端呢,首先写个Service层,创建GetOriginalDrawingAsync方法:

imagePath为图片存储的路径,代码太多了,这里就不做多的解释了,至于图片路径怎么传都行,只要是能访问到的路径就行。

    public async Task<(Image, IImageFormat)> GetOriginalDrawingAsync(string imagePath)
    {
        await using var fileStream = new FileStream(imagePath, FileMode.Open);
        var (image, format) = await Image.LoadWithFormatAsync(fileStream);
        return (image, format);
    }

上述方法使用了SixLabors.ImageSharp库,可通过NuGet包下载

首先这个方法的返回值是(Image, IImageFormat)

Image 表示一个图像对象,包含了图像的像素数据和相关的元数据信息。IImageFormat 表示图像的格式,例如 JPEG、PNG 等。这两个对象一起组成了这个方法的返回值,表示从指定路径的图像文件中读取到的原始图像及其格式。

Controller层

然后在控制器层编写一个私有方法去处理Service返回的图片信息

    private static async Task<IActionResult> GenerateImageResponse(Image image, IImageFormat format)
    {
        var encoder = image.GetConfiguration().ImageFormatsManager.FindEncoder(format);
        await using var stream = new MemoryStream();
        await image.SaveAsync(stream, encoder);
        return new FileContentResult(stream.GetBuffer(), "image/jpeg");
    }

代码详解如下:

  1. 首先调用 GetConfiguration 方法获取当前 Image 对象的配置信息。
  2. 调用 ImageFormatsManager.FindEncoder 方法,根据指定的图像格式获取相应的编码器。
  3. 创建一个 MemoryStream 对象,并使用 await 等待对象创建完成。
  4. 调用 image.SaveAsync 方法,将当前 Image 对象保存到内存流中,并使用指定的编码器进行编码。
  5. 创建一个 FileContentResult 对象,将内存流中的图像数据作为文件内容,并将文件类型设置为 image/jpeg
  6. FileContentResult 对象作为 IActionResult 对象返回给调用方。

编写接口

[HttpGet]
public async Task<IActionResult> GetImageStreamOd()
{
    var (image, format) = await _getImageService.GetOriginalDrawingFormatAsync();
    return await GenerateImageResponse(image, format);
}

Ok,一个返回图片流的接口就完成了。

说明

这样子请求就很方便了,不过接口使用了授权,需要在请求的时候带上token字段,如何继续采用之前的方法带上token还是要进行处理,不过我在后台设置了一下,只要Get请求参数中有token即可。

返回指定格式图片:

http://zy.pljzy.top/Api/Image/GetImageStream?token=这里填写token&width=500&height=500

返回原图:

http://zy.pljzy.top/Api/Image/GetImageStreamOd?token=这里填写token

然后直接就能在网站上使用了

<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
        <img src="http://zy.pljzy.top/Api/Image/GetImageStreamOd?token=这里是token" alt=""/>
    </body>
</html>

image

token和其他的请求方式在上一篇文章已经说过了,只需要通过公众号获取token即可访问接口,关注公众号回复“获取token”就行
ZY知识库 · ZY - 图片接口JWT鉴权实现 (pljzy.top)

image

声明

本项目学习于StarBlog · 画星星高手 - Home Page (deali.cn)中图片接口而来,我的ZY知识库也是基于该博客学习而来,这个博主嘎嘎流弊。博客是开源的,对于.NET感兴趣的可以去了解一下。

然后这个图片项目也是更新了3篇文章,如果后面没什么特别的需求是不会更新了,这个小项目也就到此结束。

我的博客地址:

ZY知识库 · ZY - Home Page (pljzy.top)

标签:返回,Image,通过,接口,token,image,图片
From: https://www.cnblogs.com/ZYPLJ/p/17457385.html

相关文章

  • 补充:通过Python中的subprocess模块实现安装pip模块
    通过Python代码实现安装pip模块或更新可以使用Python的内置模块subprocess来实现安装pip模块,具体步骤如下:【一】导入subprocess模块。importsubprocess【二】执行安装命令。subprocess.call(['python','-m','ensurepip','--upgrade'])在上面的代码中,调用subproce......
  • Python|通过FastAPI开发一个快速的WebAPI项目
    前言Python如此受欢迎的众多原因之一是Python有大量成熟和稳定的库可供选择:网页开发有:Django和Flask,提供了很好的网络开发体验和大量的有用文档机器学习有:scikit-learn、Keras等,提供了丰富的机器学习的包和数据处理和可视化工具。FastAPI是一个快速、轻量级的现代A......
  • Andrid listview异步图片加载之优化篇
    关于listview的异步加载,网上其实很多示例了,总体思想差不多,不过很多版本或是有bug,或是有性能问题有待优化。有鉴于此,本人在网上找了个相对理想的版本并在此基础上进行改造,下面就让在下阐述其原理以探索个中奥秘,与诸君共赏…        贴张效果图先:         异步加载......
  • 如何通过CAD图中的坐标来确定是哪个坐标系
    国内常见的坐标系坐标系分为以下两种:地理坐标系(GeographicCoordinateSystem,GCS)投影坐标系(ProjectedCoordinateSystem,PCS)那什么是地理坐标系统呢?地理坐标系:为球面坐标。参考平面地是椭球面,坐标单位:经纬度。以地球参考为例,坐标系就相当于整个地球,而地理坐标系就是椭......
  • 基于Selenium库的python爬虫脚本,爬取painterest上的图片
    基于Selenium库的python爬虫脚本,爬取painterest上的图片问题背景Pinterest是一个社交媒体平台,它提供了一个虚拟的个人兴趣画板,让用户可以收集和分享他们喜欢的图片、视频和链接。上面有许多优秀的图片供浏览和下载,但是一个个点图片下载非常麻烦。于是想要用Python语言写一个自......
  • Excel批量插入图片(Excel函数集团)
    批量插入图片,归函数集团管了?对,你没看错,就是函数集团的活!因为Microsoft365出了一个新函数:IMAGE!所以,以前折腾的那种一堆合并以后再贴进txt文本文件再贴回来的,没用了?是与不是,我们用实例来说话! ***一条不算太华丽的分割线***准备工作1:一堆图片图片还是那个图片,但保存的位置却不是那个......
  • jQuery Backstretch动态设置背景图片插件
    [url]http://www.2cto.com/kf/201411/348425.html[/url]官方:[url]https://github.com/srobbin/jquery-backstretch[/url]<scriptsrc="Scripts/jquery-1.8.2.min.js"></script><scriptsrc="Scripts/jquery.backstretc......
  • Android网络图片三级缓存策略
    在移动应用中,我们一般将网络图片分为三个级别,第一级别是网络层,即根据图片的url地址可以找到服务器上相应图片,获取这一层的图片会消耗流量,所以我们希望可以获取后本地就永久使用,所以就会有接下来的缓存策略;第二层缓存是在手机内存层,是将第一层的图片下载到手机内存,这种缓存读取速度......
  • 电商平台通过API接口进行数据采集的意义
    ​    电商平台数据采集是指通过一系列的数据收集技术和方法,从电商平台上获取各种与电商活动相关的数据,并进行组织、整合、分析和利用的过程。电商平台数据采集可以获取与以下方面相关的数据: 1.商品信息:包括商品名称、描述、价格、运费、库存等数据。2.订单信息:包......
  • Spring返回json格式数据的三种方式
    SVN多版本库环境的搭建OAuth2.0是什么?看这篇文章就够了。前端JavaPython等资源合集大放送目前前后端分离大行其道,如何进行前后分类是各个项目需要考虑的问题。如何使用Spring进行前后端分离呢?返回json格式数据是前后端分离的最佳选择。下面介绍使用Spring进行前后端分离的常用三......