/// <summary>
/// 图像缩略图处理
/// </summary>
/// <param name="bytes">图像源数据</param>
/// <param name="compression">压缩质量 1-100</param>
/// <param name="thumbWidth">缩略图的宽</param>
/// <param name="thumbHeight">缩略图的高</param>
/// <returns></returns>
public static byte[] ConvertToThumbnail(byte[] bytes, int compression = , int thumbWidth = , int thumbHeight = )
{
byte[] bs = null; try
{
if (bytes != null)
{
using (MemoryStream ms = new MemoryStream(bytes))
{
using (Bitmap srcimg = new Bitmap(ms))
{
if (thumbWidth == && thumbHeight == )
{
thumbWidth = srcimg.Width;
thumbHeight = srcimg.Height;
}
using (Bitmap dstimg = new Bitmap(thumbWidth, thumbHeight))//图片压缩质量
{
//从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。
using (Graphics gr = Graphics.FromImage(dstimg))
{
//把原始图像绘制成上面所设置宽高的缩小图
Rectangle rectDestination = new Rectangle(, , thumbWidth, thumbHeight);
gr.Clear(Color.WhiteSmoke);
gr.CompositingQuality = CompositingQuality.HighQuality;
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.DrawImage(srcimg, rectDestination, , , srcimg.Width, srcimg.Height, GraphicsUnit.Pixel); EncoderParameters ep = new EncoderParameters();
ep.Param[] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);//设置压缩的比例1-100
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo = arrayICI.FirstOrDefault(t => t.FormatID == System.Drawing.Imaging.ImageFormat.Png.Guid);
using (MemoryStream dstms = new MemoryStream())
{
if (jpegICIinfo != null)
{
dstimg.Save(dstms, jpegICIinfo, ep);
}
else
{
dstimg.Save(dstms, System.Drawing.Imaging.ImageFormat.Png);//保存到内存里
}
bs = new Byte[dstms.Length];
dstms.Position = ;
dstms.Read(bs, , bs.Length);
}
}
}
}
}
}
}
catch (Exception ex)
{
LogManager.DefaultLogger.Error(LogConvert.ParseWebEx(ex), string.Concat("ConvertToThumbnail error.", thumbWidth, " ", thumbHeight));
}
return bs;
}

C# 图片无损压缩的更多相关文章

  1. C#/.net 通过js调用系统相机进行拍照,图片无损压缩后进行二维码识别

    这两天撸了一个需求,通过 JS  调用手机后置相机,进行拍照扫码.前台实现调用手机相机,然后截取图片并上传到后台的功能.后台接收传过来的图片后,通过调用开源二维码识别库 ZXing 进行二维码数据解析 ...

  2. .net 图片无损压缩

    命名空间: using System.Drawing.Imaging; using System.Drawing; using System.Drawing.Drawing2D; #region Ge ...

  3. php图片无损压缩的问题解决

    代码如下 <?php namespace App\Contract; use Carbon\Carbon; /** * 图片压缩封装类 * @author jackie <2019.11. ...

  4. ios 视频/图片压缩

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  5. 如何使用optipng压缩png图片

    OptiPNG – Google推荐的png图片无损压缩工具下载及使用教程 2014年08月24日 实用软件 暂无评论 optipng png图片无损压缩工具介绍: optipng png图片无损压缩 ...

  6. HTML基础标签图片文本超链接列表表格介绍

    1.HTML基础标签图片常见代码形式<img src="图片路径地址" alt="属性名" title="占位符">常见的图片格 ...

  7. 前端自动化构建工具gulp记录

    一.安装 1)安装nodejs 通过nodejs的npm安装gulp,插件也可以通过npm安装.windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令 ...

  8. 前端构建工具gulp使用

    前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中文文档 https://g ...

  9. 198个经典C#WinForm实例源码(超赞) 里面的例子 .sln 目录

    \-窗体技巧\QQ窗体\QQFrm.sln; \-窗体技巧\仿XP系统的任务栏菜单\仿XP系统的任务栏菜单.sln; \-窗体技巧\向窗体中拖放图片并显示\向窗体中拖放图片并显示.sln; \-窗体技 ...

随机推荐

  1. Linux 下 查看以及修改文件权限

    查看权限 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 其中: 最前面那个 - 代表的是类型 中间那三个 rw- ...

  2. asp.net MVC4 异步文件上传

    1.下载ajaxfileupload.js 2.在控制器内创建如下方法 //文件上传 public ActionResult uploadFile(HttpPostedFileBase file) { ...

  3. qq空间等闪动的文字怎么做?

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  4. MySQL 子查询与连接操作笔记

    SQL语句之间是可以进行连接操作的,在一些复杂的数据操作中必须用到连接操作.简单的说就是一个SQL语句的结果可以作为相连接的SQL操作的一部分.SQL结构化查询语句,子查询是指的所有的SQL操作,并非 ...

  5. JAVA动态加载JAR

    // 生成JAR包D:\TestClass.jar package hand.java.loadjar; public class TestClass { private String sayHell ...

  6. 安装Axure7.0,完整教程,有验证码和汉化包

    以下内容由Axure中文网 » Axure7.0中文汉化语言包下载 axure汉化包 改编,特此声明 1.下载安装包 官方下载页面: http://www.axure.com/download 官网直 ...

  7. 【Android自学日记】五大布局常用属性

    线性布局(LinearLayout)常用属性: android:orientation="vertical"--决定子类控件的排布方式(vertical垂直:horizontal水 ...

  8. RxJava简单的介绍

    1. RxJava简介 Rx(ReactiveX,响应式编程)是一种事件驱动的基于异步数据流的编程模式,整个数据流就像一条河流,它可以被观测(监听),过滤,操控或者与其他数据流合并为一条新的数据流.而 ...

  9. Android 学习资源收集

    1.2015最流行的Android组件.工具.框架大全 地址  http://www.open-open.com/lib/view/open1436262653692.html

  10. Javascript模块化编程(三):require.js的用法

    Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...