如何在没有 System.Drawing.Common 的情况下使用 C# 获取图片格式
之前写过一篇博文,用来获取图片的正确格式。博文所示代码一直工作良好,直到今天在将程序部署到阿里云函数计算时,发生了以下报错:
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# 获取图片格式相关推荐
- System.Drawing.Common在Linux下不兼容问题
百度大多解决方案都是安装libgdiplus,但是如此还是比较麻烦的. 最简单的方式就是直接再引用一个linux补丁包,轻松搞定: runtime.linux-x64.corecompat.syste ...
- 解决.Net Core 使用 System.Drawing.Common 在CentOS下报错'Gdip'
在使用CentOS netcore产生验证码 发生错误The type initializer for 'Gdip' threw an exception. 在CentOS命令行中输入 先看一下cen ...
- System.Drawing.Common workaround in .NET6
System.Drawing.Common workaround in .NET6 Intro 最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题,同时 ...
- linux docker 中使用 System.Drawing.Common 异常 System.Drawing.Common 仅在 Windows 上受支持
System.Drawing.Common NuGet 包现在被归类为特定于 Windows 的库.为非 Windows 操作系统编译时,平台分析器会在编译时发出警告. 在非 Windows 操作系统 ...
- m_Orchestrate learning system---九、在无法保证是否有图片的情况下,如何保证页面格式...
m_Orchestrate learning system---九.在无法保证是否有图片的情况下,如何保证页面格式 一.总结 一句话总结:都配上默认缩略图就可以解决了 1.如何获取页面get方式传过来 ...
- word中双栏情况下插入单栏效果图片
word中双栏情况下插入单栏效果图片流程: 1.光标放在要插入图片的地方,选择 "布局"---->>>分隔符选项----选择 "分节符(连续)&quo ...
- 【IEEE论文投稿word中双栏情况下插入单栏效果图片】
[IEEE论文投稿word中双栏情况下插入单栏效果图片] word中双栏情况下插入单栏效果图片流程: word中双栏情况下插入单栏效果图片流程: 1.光标放在要插入图片的地方,选择 "布局& ...
- Python 技巧篇-官方网站打不开的情况下通过官方获取最新python安装包方法
可以通过官方的 ftp 地址即可访问:https://www.python.org/ftp/python/ 喜欢的点个赞❤吧!
- java 改像素不改尺寸_如何不改变分辨率的情况下缩小尺寸PNG图片
有的地方(比如腾讯自制APP的图标)对上传的图片不仅有格式的限制,并且还有分辨率和大小的限制,那要如何在不改变格式和分辨率的前提下,缩小图片大小呢? 通常来说,要把一张图片缩小,可以减小它的尺寸,或者 ...
最新文章
- 【个人随笔】准备整理整理以往的资料
- Shell命令-搜索文件或目录之whereis、locate
- ServletContext对象详解
- c语言 双线程,如何用C语言实现多线程
- 微服务架构模式下配置管理
- 使用BigDecimal时,报NumberFormatException
- [洛谷P1082]同余方程
- 12.万无一失:网站的高可用架构
- word20161205
- 全国计算机二级vb试题库,全国计算机等级考试题库之二级VB试题
- guide, manual, tutorial之间的区别
- PHP微信公众号授权登录
- HTML电子邮件格式的制作与发送
- IP 地址以 0 开头会降维成八进制
- STM32F103 flash地址与数据存入时高低位的关系
- 接受数据的php文件源码,PHP文件上传源码分析(RFC1867)
- Linux—虚拟机下如何查看系统是多少位的?32 or 64
- A problem occurred configuring root project ‘xxx‘.
- 拼多多店铺商品被下架了?凶手可能藏这儿!
- 色彩大全,色彩配色大全