之前写过一篇博文,用来获取图片的正确格式。博文所示代码一直工作良好,直到今天在将程序部署到阿里云函数计算时,发生了以下报错:

System.Drawing is not supported on this platform.

这表明我们不能在阿里云函数计算服务器上使用 GDI+ 相关的函数,即便如此我们仍然可以通过读取文件头获取图片格式:

   public static class ImageHelper{public enum ImageFormat{Bmp,Jpeg,Gif,Tiff,Png,Unknown}public static ImageFormat GetImageFormat(byte[] bytes){var bmp = Encoding.ASCII.GetBytes("BM"); // BMPvar gif = Encoding.ASCII.GetBytes("GIF"); // GIFvar png = new byte[] {137, 80, 78, 71}; // PNGvar tiff = new byte[] {73, 73, 42}; // TIFFvar tiff2 = new byte[] {77, 77, 42}; // TIFFvar jpeg = new byte[] {255, 216, 255, 224}; // jpegvar jpeg2 = new byte[] {255, 216, 255, 225}; // jpeg canonif (bmp.SequenceEqual(bytes.Take(bmp.Length))){return ImageFormat.Bmp;}if (gif.SequenceEqual(bytes.Take(gif.Length))){return ImageFormat.Gif;}if (png.SequenceEqual(bytes.Take(png.Length))){return ImageFormat.Png;}if (tiff.SequenceEqual(bytes.Take(tiff.Length))){return ImageFormat.Tiff;}if (tiff2.SequenceEqual(bytes.Take(tiff2.Length))){return ImageFormat.Tiff;}if (jpeg.SequenceEqual(bytes.Take(jpeg.Length))){return ImageFormat.Jpeg;}if (jpeg2.SequenceEqual(bytes.Take(jpeg2.Length))){return ImageFormat.Jpeg;}return ImageFormat.Unknown;}}

新的 ImageHelper 需要一个二进制数组作为参数,但这并不代表需要将全部的文件内容都读取到内存。使用以下代码可以获得较好的运行效果:

    var fn = @"D:\1.jpg";using (var fs = File.OpenRead(fn)){var header = new byte[10];await fs.ReadAsync(header, 0, 10);var ext = ImageHelper.GetImageFormat(header);ext.Dump();}

如何在没有 System.Drawing.Common 的情况下使用 C# 获取图片格式相关推荐

  1. System.Drawing.Common在Linux下不兼容问题

    百度大多解决方案都是安装libgdiplus,但是如此还是比较麻烦的. 最简单的方式就是直接再引用一个linux补丁包,轻松搞定: runtime.linux-x64.corecompat.syste ...

  2. 解决.Net Core 使用 System.Drawing.Common 在CentOS下报错'Gdip'

    在使用CentOS netcore产生验证码 发生错误The type initializer for 'Gdip' threw an exception. 在CentOS命令行中输入 先看一下cen ...

  3. System.Drawing.Common workaround in .NET6

    System.Drawing.Common workaround in .NET6 Intro 最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题,同时 ...

  4. linux docker 中使用 System.Drawing.Common 异常 System.Drawing.Common 仅在 Windows 上受支持

    System.Drawing.Common NuGet 包现在被归类为特定于 Windows 的库.为非 Windows 操作系统编译时,平台分析器会在编译时发出警告. 在非 Windows 操作系统 ...

  5. m_Orchestrate learning system---九、在无法保证是否有图片的情况下,如何保证页面格式...

    m_Orchestrate learning system---九.在无法保证是否有图片的情况下,如何保证页面格式 一.总结 一句话总结:都配上默认缩略图就可以解决了 1.如何获取页面get方式传过来 ...

  6. word中双栏情况下插入单栏效果图片

    word中双栏情况下插入单栏效果图片流程: 1.光标放在要插入图片的地方,选择 "布局"---->>>分隔符选项----选择 "分节符(连续)​&quo ...

  7. 【IEEE论文投稿word中双栏情况下插入单栏效果图片】

    [IEEE论文投稿word中双栏情况下插入单栏效果图片] word中双栏情况下插入单栏效果图片流程: word中双栏情况下插入单栏效果图片流程: 1.光标放在要插入图片的地方,选择 "布局& ...

  8. Python 技巧篇-官方网站打不开的情况下通过官方获取最新python安装包方法

    可以通过官方的 ftp 地址即可访问:https://www.python.org/ftp/python/ 喜欢的点个赞❤吧!

  9. java 改像素不改尺寸_如何不改变分辨率的情况下缩小尺寸PNG图片

    有的地方(比如腾讯自制APP的图标)对上传的图片不仅有格式的限制,并且还有分辨率和大小的限制,那要如何在不改变格式和分辨率的前提下,缩小图片大小呢? 通常来说,要把一张图片缩小,可以减小它的尺寸,或者 ...

最新文章

  1. 【个人随笔】准备整理整理以往的资料
  2. Shell命令-搜索文件或目录之whereis、locate
  3. ServletContext对象详解
  4. c语言 双线程,如何用C语言实现多线程
  5. 微服务架构模式下配置管理
  6. 使用BigDecimal时,报NumberFormatException
  7. [洛谷P1082]同余方程
  8. 12.万无一失:网站的高可用架构
  9. word20161205
  10. 全国计算机二级vb试题库,全国计算机等级考试题库之二级VB试题
  11. guide, manual, tutorial之间的区别
  12. PHP微信公众号授权登录
  13. HTML电子邮件格式的制作与发送
  14. IP 地址以 0 开头会降维成八进制
  15. STM32F103 flash地址与数据存入时高低位的关系
  16. 接受数据的php文件源码,PHP文件上传源码分析(RFC1867)
  17. Linux—虚拟机下如何查看系统是多少位的?32 or 64
  18. A problem occurred configuring root project ‘xxx‘.
  19. 拼多多店铺商品被下架了?凶手可能藏这儿!
  20. 色彩大全,色彩配色大全

热门文章

  1. php 计算代码执行时间
  2. windows - mysql
  3. hibernate -- hello world
  4. DEV-aspxgridview中的aspcheckbox
  5. hdu 1460 完数
  6. live555学习笔记7-RTP打包与发送
  7. 阿帕奇退出java_java+tomcat+apache安装整合,启动/关闭,添加开机启动服务
  8. raspberry pi_在月光下将Raspberry Pi变成蒸汽机
  9. 火狐 新增标签 一直加载_在Firefox的新标签页中加载最后标签页的URL
  10. vue引入全局less实现全局变量的控制