【问题标题】:c# net core 3.1 razor pages how to use image classc# net core 3.1 razor pages如何使用image类
【发布时间】:2021-09-25 18:39:58
【问题描述】:

这是我所拥有的: 客户希望我将动态图像添加到视图中。该图像是谷歌的卫星视图。我已经设法浏览了谷歌 API 以获得一个有效的 url:https://maps.googleapis.com/maps/api/staticmap?size=400x400&markers=color:red|lat,lng&center=lat,lng&zoom=18&maptype=roadmap&key=API-KEY

这将呈现具有客户所需的所有标记和区域/缩放/边界...的图像。

我需要什么: 我可以将其发送到 标记客户端中的 src 属性,但是,这意味着 API-KEY 也将最终到达客户端,这是个坏主意。我想要做的是在 OnGet 方法中将图像“下载”到服务器,然后将其转换为 base64 并将该十六进制作为图像标签的 src 属性。为此,我需要能够使用 Image 类,而且我没有任何运气找到与成像(图像、位图...)相关的类,我应该在哪里寻找?

提前致谢。

【问题讨论】:

    标签: c# .net razor google-api razor-pages


    【解决方案1】:

    试试这个 Nuget 包System.Drawing.Common。它包含 System.Drawing.ImageSystem.Drawing.Bitmap 等类,类似于旧的 .NET Framework 类。

    我将它用于各种图像处理,发现它运行良好 - 并且可以跨平台运行。

    【讨论】:

      【解决方案2】:

      正如@bfren 上面所说,使用System.Drawing.Common 包包含了我进行成像所需的所有内容,但是,我将发布我如何让它工作的完整答案:

        using System.Drawing;
      
        ...
        ...
        ...
      
        WebClient client = new WebClient();
        Stream stream = client.OpenRead(imageUrl.ToString());
        Bitmap bitmap = new Bitmap(stream);
      
      
        MemoryStream imgStream = new MemoryStream();
        bitmap.Save(imgStream, System.Drawing.Imaging.ImageFormat.Bmp);
        byte[] imageBytes = imgStream.ToArray();
      
        return Convert.ToBase64String(imageBytes);
      

      注意:这很好用,但记得把它放在 ajax 调用中,图像可能很大。

      【讨论】:

      • 太好了,很高兴它成功了——我建议在你的实际代码中添加一些using 语句,以确保事后正确处理。
      猜你喜欢
      • 2020-11-23
      • 2021-06-02
      • 2018-11-08
      • 1970-01-01
      • 2021-05-29
      • 2021-04-28
      • 1970-01-01
      • 2019-07-05
      • 2020-06-10
      相关资源
      最近更新 更多