准备参数:图片文件流、文件名

方法:1.先将图片流通过System.Drawing.Image.FromStream方法转成图片对象

   2.通过图片对象.GetThumbnailImage方法生成自定义长宽的缩略图。

生成方法:

缩略图生成:

/// <summary>
/// 缩略图
/// shidd
/// </summary>
/// <param name="myStream">文件流</param>
/// <param name="serverUrl">文件名</param>
/// <returns>字节数组</returns>
private byte[] toImage(Stream myStream, string serverUrl)
{
//生成缩略图
//创建改变后的Stream
var stream = new System.IO.MemoryStream();
//取得后缀名
string suffix = serverUrl.Substring(serverUrl.LastIndexOf("."));
//创建一个图像对象取得上传图片对象
System.Drawing.Image myImage = System.Drawing.Image.FromStream(myStream, false);
//int percentage= myImage.Height / myImage.Width;//原图片比例
//由上传图片产生一个缩略图(600*400)
System.Drawing.Image thumbImage = myImage.GetThumbnailImage(, , null, System.IntPtr.Zero);
//保存缩略图到Stream流
thumbImage.Save(stream, this.getImageFormat(suffix));
//关闭缩略图对象
thumbImage.Dispose();
return stream.ToArray();
}

图片格式:

 /// <summary>
/// 图片格式
/// </summary>
/// <param name="suffix">文件后缀</param>
/// <returns></returns>
private System.Drawing.Imaging.ImageFormat getImageFormat(string suffix)
{
System.Drawing.Imaging.ImageFormat myFormat;
switch (suffix.ToLower())
{
case ".bmp":
myFormat = System.Drawing.Imaging.ImageFormat.Bmp;
break;
case ".emf":
myFormat = System.Drawing.Imaging.ImageFormat.Emf;
break;
case ".exif":
myFormat = System.Drawing.Imaging.ImageFormat.Exif;
break;
case ".gif":
myFormat = System.Drawing.Imaging.ImageFormat.Gif;
break;
case ".icon":
myFormat = System.Drawing.Imaging.ImageFormat.Icon;
break;
case ".jpeg":
case ".jpg":
myFormat = System.Drawing.Imaging.ImageFormat.Jpeg;
break;
case ".png":
myFormat = System.Drawing.Imaging.ImageFormat.Png;
break;
case ".tiff":
myFormat = System.Drawing.Imaging.ImageFormat.Tiff;
break;
case ".wmf":
myFormat = System.Drawing.Imaging.ImageFormat.Wmf;
break;
default:
myFormat = System.Drawing.Imaging.ImageFormat.MemoryBmp;
break;
}
return (myFormat);
}

调用:

 //调用缩略图方法
bytes = toImage(ms, ServerUrl);

GIF图缩略(注:缩略后图片不能动了,求高手指点)

 // <summary>
/// 为GIF图片生成缩略图
/// </summary>
/// <param name="phyPath">原图片的路径</param>
/// <param name="width">缩略图宽</param>
/// <param name="height">缩略图高</param>
/// <returns></returns>
public byte[] GetThumbnail(Stream myStream, int width, int height)
{
//创建改变后的Stream
var stream = new System.IO.MemoryStream();
//创建一个图像对象取得上传图片对象
System.Drawing.Image myImage = System.Drawing.Image.FromStream(myStream, false);
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(width, height);
//从Bitmap创建一个System.Drawing.Graphics
System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);
//设置
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//下面这个也设成高质量
gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
//下面这个设成High
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
//把原始图像绘制成上面所设置宽高的缩小图
System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(, , width, height); gr.DrawImage(myImage, rectDestination, , , myImage.Width, myImage.Height, System.Drawing.GraphicsUnit.Pixel);
myImage.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
return stream.ToArray();
}

C#图片处理,缩略图制作的更多相关文章

  1. phpcms v9图片生成缩略图变成黑色解决方法

    今天客户反映,上传的图片生成缩略图有的图片变成黑色,出现问题就百度了一下,有不少网友也遇到这样的问题,但是官方论坛也没有给出解决办法,那还得靠自己解决了,于是就研究phpcms v9 图片压缩代码.打 ...

  2. nginx实现本地图片生成缩略图

    nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x ...

  3. android实现视频图片取缩略图

    取缩略图不等同于缩放图片. 缩放图片是保持不失真的情况下缩放处理,并进行平滑处理. 缩略图则不然,允许失真,目的只是取出图片的轮廓. 保存Bitmap图片 private void saveBitma ...

  4. Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug

    由于android获取图片过大是会出现内存溢出的Bug 07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError 解 ...

  5. java 图片生成缩略图后,转化成流

    功能:图片生成缩略图后,转化成流 public class ImageUtils { /** * * @param in1 * 文件流 * @param uploadFileName * 文件名称 * ...

  6. 织梦DEDECMS更换目录后页面内的图片和缩略图无法显示解决方法

    http://www.win8f.com/seoyouhua/6609.html 很多人碰到织梦更换目录后内容图片和缩略图无法显示的问题,在此,慧鸿网络特地搜集整理了一篇关于织梦出现缩略图和内容无法显 ...

  7. NGUI和UGUI图片字 艺术字(Bitmap图片转文字)制作方法

    用图片字而不是图片 美术和程序的配合,需要程序能够很快抓住问题重点并提出解决方案.美术出的图片字比我们使用的字体更好好看,那么是否要一个个图片去拼成数字呢? NGUI创建图片字 准备材料 美术提供的数 ...

  8. C# 图片生成缩略图

    C# 图片生成缩略图方法: /// <summary> /// 生成缩略图 /// </summary> /// <param name="fileName&q ...

  9. Android 简单图片浏览器 读取sdcard图片+形成缩略图+Gallery

    1.读取SD卡上面的图片信息 //想要的返回值所在的列 String[] projection = { MediaStore.Images.Thumbnails._ID}; //图片信息存储在 and ...

随机推荐

  1. Python format 格式化函数。

    Python format 格式化函数  Python 字符串 Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 ...

  2. 【校招面试 之 C/C++】第15题 C 回调函数

    转自:https://segmentfault.com/a/1190000008293902 做略微改动 什么是回调函数 我们先来看看百度百科是如何定义回调函数的: 回调函数就是一个通过函数指针调用的 ...

  3. [leetcode]242. Valid Anagram验证变位词

    Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...

  4. MongoDB安装(一)

    详细图解,记录 win7 64 安装mongo数据库的过程.安装的版本是 MongoDB-win32-x86_64-2008plus-ssl-3.4.1-signed. 示例版本:mongodb-wi ...

  5. Visual Event查看页面相关绑定事件

    页面相关绑定的事件比较复杂,在不熟悉的情况下很难找到相关逻辑的位置,所以希望借助工具来帮自己理清相关事件的脉络走向. 浏览器 工具 chrome( 58.0.3029.110) Visual Even ...

  6. win10下zip安装mysql5.7的一些问题

    一.MySQL下载地址: http://dev.mysql.com/downloads/mysql/ 我们下载zip版本的   二.解压zip文件   三.复制一份里面的my-default.ini为 ...

  7. linux系统命令笔记

    一.linux系统目录 /bin 系统命令目录 /dev 设备目录 /home 每个系统用户在home下都有一个目录, 每个用户登录到系统后会自动登录到这个目录下, root用户会在/root文件夹下 ...

  8. windows下 Memcache cpu占用过高

    分析应该是memcache的内存大小还是默认配置,已经满足不了当前的大数据量的需要了,大量的新缓存需要进入,同时大量的旧缓存又需要被淘汰出来,一进一出导致CPU占用过多. 进入注册表,找到:HKEY_ ...

  9. Golang之beego读取配置信息,输出log模块

    1,准备好配置文件 [server] listen_ip = "0.0.0.0" listen_port = [logs] log_level=debug log_path=./l ...

  10. Golang之写一个聊天室

    . 海量用户在线聊天系统 . 点对点聊天 . 用户登录&注册 一.服务端开发 . 用户管理 用户id:数字 用户密码:字母数字组合 用户昵称:用来显示 用户性别:字符串 用户头像:url 用户 ...