System.Drawing.Image在Save之后Type变了

前段时间发现asp.net MVC 3附带了一个相当方便的图片处理类WebImage,常用的图片处理功能全都包括进去了,用起来是相当的爽。

在项目中刚好有相关的图片处理需求,但由于实际项目是使用asp.net 2.0 webform的,只能把WebImage中图片处理的一部分提取出来。使用了一段时间都比较正常,最近发现在把图片进行“调整大小”、“水印”等处理之后,图片的Type都变成PNG了。

检查了一下,貌似有点关键代码刚好漏掉了,也不想完全照搬WebImage的处理方式,所以在保存文件的时候重新设置了一下ImageCodecInfo。

private static ImageCodecInfo GetImageEncoder(string imageType)

{

    imageType = imageType.ToUpperInvariant();

    foreach (ImageCodecInfo info in ImageCodecInfo.GetImageEncoders())

    {

        if (info.FormatDescription == imageType)

        {

            return info;

        }

    }

    return null;

}

以上代码用于获取具体图片类型的ImageCodecInfo,如BMP, JPEG, GIF, TIFF, PNG。

在保存的时候调用如下:

using (EncoderParameters parms = new EncoderParameters(1))

{

    parms.Param[0] = new EncoderParameter(Encoder.Compression, 40);

    img.Save(file, GetImageEncoder(“JPEG”), parms);

}

以上代码对图片进行压缩,再保存为JPEG编码格式,可以根据实际需要进行调整。

额,发现WebImage这些工具类虽然很好用,但是也容易使人变懒,不过研究一下它们的实现倒是很好的学习方式。

时间: 2024-12-16 14:50:08

System.Drawing.Image在Save之后Type变了的相关文章

debian The type initializer for 'System.Drawing.KnownColors' threw an exception

Change the "System.Drawing" reference of "CoreCompat.System.Drawing"if you throw The type initializer for 'System.Drawing.KnownColors' threw an exception to do:apt-get install libgdiplus debian The type initializer for 'System.Drawing.

Asp.Net Core使用System.Drawing.Common部署到docker报错问题

原文:Asp.Net Core使用System.Drawing.Common部署到docker报错问题 Asp.Net Core 2.1发布后,正式支持System.Drawing.Common绘图了,可以用来做一些图片验证码之类的功能.但是把网站部署到docker容器里运行会遇到很多问题,也是非常闹心的,本文记录这些问题,希望帮到有需要的人. 创建网站 前提条件:安装最新版VS2017和Net Core SDK 2.1. 首先新建网站,选择Asp.Net Core 2.1 Web应用程序(模型

使用System.Drawing.Imaging.dll进行图片的合并

在最近开发项目的时候有时候需要进行图片的合并,即将两张图片合并成功一张图片 合并图片的代码: 1 #region 两张图片的合并 2 3 /// <summary > 4 /// 将Image对象转化成二进制流 5 /// </summary > 6 /// <param name="image" > </param > 7 /// <returns > </returns > 8 public byte[] Im

类库探源——System.Drawing.Bitmap

一.System.Drawing.Bitmap Bitmap 类: 封装GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素定义的图像的对象 命名空间: System.Drawing 程序集:   System.Drawing.dll 继承关系: 原型定义: [SerializableAttribute] [ComVisibleAttribute(true)] public sealed class Bitmap : Image 备注:GDI+ 支持下列文件格式

利用System.Drawing.Image类进行图片相关操作

C#中对图片的操作主要是通过System.Drawing.Image等类进行. 一.将图片转换为字节流 /// <summary> /// 图片处理帮助类 /// </summary> public static class PicProcessHelper { /// <summary> /// 将图片转换为指定的字节流 /// </summary> /// <param name="filePath">图片路径</p

类库探源——System.Drawing

一.System.Drawing 命名空间简述 System.Drawing 命名空间提供访问 GDI+ 的基本功能,更高级的功能在 System.Drawing.Drawing2D,System.Drawing.Imaging 和 System.Drawing.Text 命名空间 程序集: System.Drawing.dll 二.System.Drawing.Image 简述 Image 类:为源自 Bitmap 和 Metafile 的类提供功能的抽象基类 命名空间: System.Dra

AutoCAD.Net/C#.Net QQ群:193522571 多个框架共一套代码在进行迁移时的问题,properties,resource,未能加载文件或程序集“System.Drawing, Version=4.0.0.0

此时在3.5框架工程中会出现 [未能加载文件或程序集“System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项.系统找不到指定的文件. 行 123,位置 5.] 的错误,解决办法是将4.0.0.0改成2.0.0.0.如下面的代码. 另外,在namespace进行了修改后需要将“原命名空间.properties.resource ”改成“现在的命名空间.properties

.net学习笔记----利用System.Drawing.Image类进行图片相关操作

C#中对图片的操作主要是通过System.Drawing.Image等类进行. 一.将图片转换为字节流 /// <summary> /// 图片处理帮助类 /// </summary> public static class PicProcessHelper { /// <summary> /// 将图片转换为指定的字节流 /// </summary> /// <param name="filePath">图片路径</p

C# System.Drawing.Graphics 画图后,如何保存一个低质量的图片,一个占用空间较小的图片

首先要控制图片保存后硬盘后的大小(即占用硬盘的空间,而非尺寸),真正要处理的是控制 System.Drawing.Bitmap.Save 方法的参数. 具体实现如下: private void ThumbPicture(Image SourceImage, int TargetWidth,string savePath) { int IntWidth; //新的图片宽 int IntHeight; //新的图片高 try { int TargetHeight = (int)Math.Round(