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. Java反射机制简单使用

    1.Java反射相关类所在package: java.lang.reflect.* 2.开始使用Reflection: 使用reflect相关类,遵循三个步骤: a.获取想要操作类的 java.lan ...

  2. java的LinkedList的用法

    http://blog.chinabyte.com/blog.php?do-showone-uid-135325-itemid-454704-type-blog.html 总结下,LinkedList ...

  3. theos初探:ios越狱开发教程

    开发环境搭建回顾 现在已经在windows上安装好了theos了.在上一篇中都已经讲了,开发环境主要部件就是: 1.theos,主要包含了使用make时的makefile模板文件.包含了各种库和框架的 ...

  4. NOI十连测 第四测 T1

    思路:首先每个蚂蚁移速相同,而且碰到就转头,这其实等价于擦肩而过! 看到2n个数互不相同就觉得方便多了:枚举每个数字往左或者往右作为最慢,然后考虑其他蚂蚁有多少种走路方向. (1),走的距离大于m/2 ...

  5. WPF笔记(1.8 资源与映射)——Hello,WPF!

    原文:WPF笔记(1.8 资源与映射)--Hello,WPF! 终于,看明白了,已经是凌晨1:39分.这本书这一节写得实在是不好,一个local搞得我糊里糊涂,于是,准备按照他的思路,按照我的理解,改 ...

  6. SQL Server 视图

    视图实际上就是一个存储查询,重点是是可以混合和匹配来自基本表(或者其他视图)的数据,从而创建在很多方面像另一个基表那样起作用的对象.可以创建一个简单的查询,仅仅从一个表中选择几列,而忽略其他列:或者也 ...

  7. SQL Server 索引的图形界面操作 <第十二篇>

    一.索引的图形界面操作 SQL Server非常强大的就是图形界面操作.关于索引方面也一样那么强大,很多操作比如说重建索引啊,查看各种统计信息啊,都能够通过图形界面快速查看和操作,下面来看看SQL S ...

  8. cf471A MUH and Sticks

    A. MUH and Sticks time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. 算法(Algorithm)是什么?

    我们用煎蛋来打个比方.煎蛋的一般步骤是: 1.>取煎锅. 2.>取油. ->我们有油吗? ****有,把油倒入煎锅. ****没有,我们要去买油吗? #########要买,出去买油 ...

  10. 《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章

    <如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章   问题:   VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何 ...