using System;

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;

public partial class Media_ImageCut : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
string FilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\0.gif";
string SavePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"/temp/1.gif";
int width = 100;
int height = 100;
ImageCut(FilePath,SavePath,width,height);
}
protected void ImageCut(string Path,string SavePath,int width,int height)
{
string imgPath = Path;//原图路径
System.Drawing.Image img = System.Drawing.Image.FromFile(imgPath);//获取原图
if (img.Width > width && img.Height > height)//不够width*height的不进行缩放
{
System.Drawing.Image img1 = new Bitmap(width, height);//获取新图的第一帧
Image img1_1 = new Bitmap(width, height);//新图的其他帧
Graphics GDI_1 = Graphics.FromImage(img1);//新图的第一帧GDI
Graphics GDI1_1 = Graphics.FromImage(img1_1);//新图的其他帧GDI
//绘制新图的第一帧
GDI_1.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;//呈现颜色时,覆盖其背景色
GDI_1.InterpolationMode = InterpolationMode.HighQualityBicubic;//质量最高的转换图像
GDI_1.PixelOffsetMode = PixelOffsetMode.HighQuality;//高质量、低速度呈现
GDI_1.SmoothingMode = SmoothingMode.HighQuality;//抗锯齿
GDI_1.Clear(Color.FromKnownColor(KnownColor.Transparent));//系统默认背景填充
//绘制新图其他帧的图像
GDI_1.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;//呈现颜色时,覆盖其背景色
GDI_1.InterpolationMode = InterpolationMode.HighQualityBicubic;//质量最高的转换图像
GDI_1.PixelOffsetMode = PixelOffsetMode.HighQuality;//高质量、低速度呈现
GDI_1.SmoothingMode = SmoothingMode.HighQuality;//抗锯齿
GDI_1.Clear(Color.FromKnownColor(KnownColor.Transparent));//系统默认背景填充
foreach (Guid guid in img.FrameDimensionsList)//遍历维数
{
FrameDimension f = FrameDimension.Time;//时间维度
int count = img.GetFrameCount(f);//根据时间维度获取总帧数
Encoder encode = Encoder.SaveFlag;//保存标志参数类别
EncoderParameters ep = null;//参数
ImageCodecInfo ici = null;//编码解码器
ImageCodecInfo[] icis = ImageCodecInfo.GetImageDecoders();//解码器集合
//获取gif的解码器
foreach (ImageCodecInfo ici1 in icis)
{
if (ici1.FormatID == ImageFormat.Gif.Guid)
{
ici = ici1;
break;
}
}
//遍历每一帧
for (int z = 0; z < count; z++)
{
img.SelectActiveFrame(f, z);
//第一帧
if (z == 0)
{
//将原图的第一帧画给新图的第一帧
GDI_1.DrawImage(img, new Rectangle(0, 0, width, height), new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel);
for (int i = 0; i < img.PropertyItems.Length; i++)//获取原图的所有属性赋给新图
{
img1.SetPropertyItem(img.PropertyItems[i]);
}
ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(encode, (long)EncoderValue.MultiFrame);//指定对象的帧数多于1帧
img1.Save(SavePath, ici, ep);//将第一帧保存到新图
}
else
{
GDI1_1.DrawImage(img, new Rectangle(0, 0, width, height), new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel);
for (int i = 0; i < img.PropertyItems.Length; i++)
{
img1_1.SetPropertyItem(img.PropertyItems[i]);
}
ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(encode, (long)EncoderValue.FrameDimensionTime);
img1.SaveAdd(img1_1, ep);
}

}
ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(encode, (long)EncoderValue.Flush);//关闭多帧文件流
img1.SaveAdd(ep);
img.Dispose();
img1.Dispose();
img1_1.Dispose();
GDI_1.Dispose();
GDI1_1.Dispose();
}
}
}

}

C# 缩放图片的更多相关文章

  1. Android 等比例缩放图片

    // 缩放图片 public static Bitmap zoomImg(String img, int newWidth ,int newHeight){ // 图片源 Bitmap bm = Bi ...

  2. Andorid-如何为你的Android应用缩放图片

    很难为你的应用程序得到正确的图像缩放吗?是你的图片过大,造成内存问题?还是图片不正确缩放造成不良用户体验的结果?为了寻求一个好的解决方案,我们咨询了Andreas Agvard(索尼爱立信软件部门), ...

  3. PHP按最大宽高等比例缩放图片类

    本来用phpthumb来缩略图片是十分方便的,但是最近在sae上写项目发现phpthumb在sae上保存文件时会出问题,想来实现一个简单的按最大宽高等比例缩放图片类也并不困难,于是便自己写了一个方便修 ...

  4. IOS 缩放图片常用方法

    /** * 指定Size压缩图片 (图片会压缩变形) * * @param image 原图 * @param size 压缩size * * @return 压缩后的图片 */ -(UIImage* ...

  5. Android拖动和缩放图片

    Android拖动和缩放图片 2014年5月9日 我们在使用应用其中常常须要浏览图片.比方在微信其中.点击图片之后能够对图片进行缩放. 本博客介绍怎样对图片进行拖拽和缩放.这首先要了解Android中 ...

  6. JavaScript等比例缩放图片

    js等比例缩放图片,这个功能非常实用,当网页加载一个尺寸比较大的图片时,往往会把一个网页撑的变形,页面变得很难看,于是我们就想到了用JS去控制超出一定范围的图片,以稳定页面布局,本代码段就是完成了此功 ...

  7. JS实现等比例缩放图片

    JS实现等比例缩放图片 2014-01-19 21:57 by 龙恩0707, 40 阅读, 0 评论, 收藏, 编辑 JS实现等比例缩放图片 有时候我们前端页面只有500×500像素的宽和高的布局, ...

  8. php 上传缩放图片

    有时上传图片时因为图片太大了,不仅占用空间,消耗流量,而且影响浏(图片的尺寸大小不一).下面分享一种等比例不失真缩放图片的方法,这样,不管上传的图片尺有多大,都会自动压缩到我们设置尺寸值的范围之内.经 ...

  9. 【转】java缩放图片、java裁剪图片代码工具类

    一首先看下效果 二工具类 三测试类 在系统的上传图片功能中,我们无法控制用户上传图片的大小,用户可能会上传大到几十M小到1k的的图片,一方面图片太大占据了太多的空间,另一方面,我们没办法在页面上显示统 ...

  10. 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片

    我们就把这个问题叫做图片查看器吧,它的主要功能有: (项目地址:https://github.com/TZHANHONG/ImageViewer/releases/tag/1.0,里面的MyImage ...

随机推荐

  1. ERP行业推荐参考书籍

    1 书名:<ERP 理论.方法与实践> 作者: 周玉清等编著 出版社:电子工业出版社 简介:本书全面介绍了ERP的基本原理和处理逻辑,以大量篇幅讨论了ERP的计划功能,特别是主生产计划功能 ...

  2. ajax 传值 中文乱码问题

    使用encodeURI编码内容 var Path = encodeURI("中文.xls"); url: "ashx/Data.ashx?Path =" + P ...

  3. javascript 执行顺序详解

    JavaScript是一种描述 型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解javaScript 语言的运行机制,或者简 ...

  4. HDU 1026 Ignatius and the Princess I(BFS+优先队列)

    Ignatius and the Princess I Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  5. inPolygonTest学习和C++实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 此篇博客实现了判定平面一点是否在给定多边形内部的功能.精确,性能优良,因为只包含加法和乘法运算,效 ...

  6. Effective Java2读书笔记-创建和销毁对象(四)

    第7条:避免使用终结方法 这一条讲的简直是不知所云.先简单记下来其中说出的几条: ①显式终止方法的典型例子有InputStream.OutputStream和java.sql.Connection上的 ...

  7. 移动端Web App自适应布局探索

    1.困扰多时的问题 在这之前做Web App开发的的时候,在自适应方面一般都是宽度通过百分比,高度以iPhone6跟iPhone5之间的一个平衡值写死,我们的设计稿都是iPhone5的640 * 11 ...

  8. png透明图片

    2. JS处理 使用DD_belatedPNG(http://www.dillerdesign.com/experiment/DD_belatedPNG/),可以很简单的对界面上所有的透明图片进行同一 ...

  9. SD card技术了解并WINCE下SDHC驱动开发(updated)

    Suumary: 简单介绍了一下SD卡的历史和发展,同时结合MX31 ADS上的WINCE 下SDHC驱动更深入的了解该硬件的一些行为特点. 了解SD card SD是Secure Digital C ...

  10. linux date

    我使用过的Linux命令之date - 显示.修改系统日期时间 本文链接:http://codingstandards.iteye.com/blog/1157513   (转载请注明出处) 用途说明 ...