当前位置:  编程技术>.net/c#/asp.net

C#图片按比例缩放的实现代码

    来源: 互联网  发布时间:2014-10-26

    本文导语:  代码如下:using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging; namespace Publics{    public class ImgHelper    {        public static void AdjustPhoto(int toWidth, int toHeight, string filePath, string fromFileName, string toFileName, int maxWidth, in...

代码如下:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace Publics
{
    public class ImgHelper
    {
        public static void AdjustPhoto(int toWidth, int toHeight, string filePath, string fromFileName, string toFileName, int maxWidth, int maxHeight)
        {
            Image originalImage = Image.FromFile(filePath + "/" + fromFileName);
            //如果尺寸不够返回保存原图
            if (originalImage.Width < toWidth && originalImage.Height < toHeight)
            {
                originalImage.Save(filePath + "/" + toFileName);
                originalImage.Dispose();
                return;
            }

            //根据图片大小获取新图片从原图片截取的区域
            int x, y, w, h;
            if (toHeight > 0)
            {
                if (toWidth > 0)
                {
                    if (originalImage.Width > toWidth && originalImage.Height > toHeight)
                    {
                        w = toWidth;
                        h = toWidth * originalImage.Height / originalImage.Width;

                        if (h > toHeight)
                        {
                            h = toHeight;
                            w = toHeight * originalImage.Width / originalImage.Height;
                            x = (toWidth - w) / 2;
                            y = 0;
                        }
                        else
                        {
                            x = 0;
                            y = (toHeight - h) / 2;
                        }
                    }
                    else if (originalImage.Width > toWidth)
                    {
                        w = toWidth;
                        h = toWidth * originalImage.Height / originalImage.Width;
                        x = 0;
                        y = (toHeight - h) / 2;
                    }
                    else if (originalImage.Height > toHeight)
                    {
                        h = toHeight;
                        w = toHeight * originalImage.Width / originalImage.Height;
                        x = (toWidth - w) / 2;
                        y = 0;
                    }
                    else
                    {
                        w = originalImage.Width;
                        h = originalImage.Height;
                        x = (toWidth - w) / 2;
                        y = (toHeight - h) / 2;
                    }
                }
                else
                {
                    if (originalImage.Height > maxHeight)
                    {
                        toWidth = toHeight * originalImage.Width / originalImage.Height;
                        x = 0;
                        y = 0;
                        w = toWidth;
                        h = toHeight;

                    }
                    else
                    {
                        x = 0;
                        y = 0;
                        w = originalImage.Width;
                        h = originalImage.Height;
                        toWidth = originalImage.Width;
                        toHeight = originalImage.Height;
                    }
                }
            }
            else
            {
                if (originalImage.Width > maxWidth)
                {
                    toHeight = toWidth * originalImage.Height / originalImage.Width;
                    x = 0;
                    y = 0;
                    w = toWidth;
                    h = toHeight;

                }
                else
                {
                    x = 0;
                    y = 0;
                    w = originalImage.Width;
                    h = originalImage.Height;
                    toWidth = originalImage.Width;
                    toHeight = originalImage.Height;
                }
            }
            Bitmap bm = new Bitmap(toWidth, toHeight);
            Graphics g = Graphics.FromImage(bm);

            g.SmoothingMode = SmoothingMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;

            g.Clear(Color.White);
            g.DrawImage(originalImage, new Rectangle(x, y, w, h), 0, 0, originalImage.Width, originalImage.Height, GraphicsUnit.Pixel);

            long[] quality = new long[1];
            quality[0] = 80;

            EncoderParameters encoderParams = new EncoderParameters();
            EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, quality);
            encoderParams.Param[0] = encoderParam;
            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();//获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。
            ImageCodecInfo jpegICI = null;
            for (int i = 0; i < arrayICI.Length; i++)
            {
                if (arrayICI[i].FormatDescription.Equals("JPEG"))
                {
                    jpegICI = arrayICI[i];//设置JPEG编码
                    break;
                }
            }
            if (jpegICI != null)
            {

                //bm.Save(Server.MapPath(path + "/thumb_" + filename), jpegICI, encoderParams);
                bm.Save(filePath + "/" + toFileName, jpegICI, encoderParams);
            }

            bm.Dispose();
            originalImage.Dispose();
            g.Dispose();
        }

        ///
        /// 保持比例图像缩放简易算法
        ///
        ///
        ///
        ///
        ///
        ///
        public static Dictionary AdjustSize(int spcWidth, int spcHeight, int orgWidth, int orgHeight)
        {
            Dictionary size = new Dictionary();
            // 原始宽高在指定宽高范围内,不作任何处理 
            if (orgWidth = 1 ? Math.Round(orgHeight / w) : Math.Round(orgHeight * w));
                }
                // 宽度比小于高度比 
                else if (w < h)
                {
                    size["Height"] = spcHeight;
                    size["Width"] = (int)(h >= 1 ? Math.Round(orgWidth / h) : Math.Round(orgWidth * h));
                }
                // 宽度比等于高度比 
                else
                {
                    size["Width"] = spcWidth;
                    size["Height"] = spcHeight;
                }
            }
            return size;
        }
    }
}


    
 
 

您可能感兴趣的文章:

  • c#正则过滤图片标签 asp.net正则过滤的例子
  • C# 图片与二进制转换的简单实例
  • C#实现动态显示及动态移除图片方法
  • C#给picturebox控件加图片选中状态的2个方法
  • 基于C# winform实现图片上传功能的方法
  • C#实现图片放大功能的按照像素放大图像方法
  • C#实现把彩色图片灰度化代码分享
  • c#读取图像保存到数据库(数据库保存图片)实例
  • C#判断上传文件是否是图片以防止木马上传的方法
  • C#实现将网页保存成图片的网页拍照功能
  • c#实现图片与字节流相互转换的代码
  • C# 将字节流转换为图片的实例方法
  • c#图片处理之图片裁剪成不规则图形
  • c# Base64编码和图片的互相转换代码
  • C#保存图片到数据库并读取显示图片的方法
  • c#读取图像保存到数据库中(数据库保存图片)
  • C# 将透明图片的非透明区域转换成Region的实例代码
  • C#操作图片读取和存储SQLserver实现代码
  • C# 判断两张图片是否一致的快速方法
  • C#中按指定质量保存图片的实例代码
  • 图片九宫缩放 scale9grid
  • jQuery图片缩放效果 FancyZoom
  • 如何在Linux下缩放显示PNG图片
  • 请问各位大虾,用gtk编程如何让图片缩放,旋转?
  • 如何实现图片上传、缩放并存放到数据库中
  • php实现图片缩放效果
  • php实现图片缩放功能类
  • CSS expression控制图片自动缩放效果代码[兼容 IE,Firefox]
  • jquery实现图片按比例缩放示例
  • php缩放图片的实例代码
  • 请问各位大虾,在Applet中如何缩放图片?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 页面布局黄金比例[图片]
  • php按比例计算图片大小的代码
  • 有谁做过把一张图片大小成比例缩小(相应图形的存储大小也要缩小)的Java程序吗?
  • iphone cocos2d 精灵的动画效果(图片,纹理,帧)CCAnimation实现
  • JS点击图片改变图片图径并用正则表达式取图片名的代码
  • Python3通过request.urlopen实现Web网页图片下载
  • Android 图片浏览器 雪梦图片浏览器
  • android中知道图片name时获取图片的简单方法
  • css为图片设置背景图片
  • android图像绘制(六)获取本地图片或拍照图片等图片资源
  • 有没有可以从已知图片里过滤出,不规则图片的滤镜??
  • 怎么让客户端从服务器下载图片后,看不到图片的最后修改时间
  • 如何将一个彩色bmp图片转换成黑白图片,急用
  • 查询图片,图片文件存放在数据库中好,还是存放路径好,是否有更好的解决办法
  • 图片和jlabel的大小不相同,怎样让图片充满整个jlabel?
  • PHP正则匹配图片并给图片加链接详解
  • phpphp图片采集后按原路径保存图片示例
  • codeigniter上传图片不能正确识别图片类型问题解决方法
  • jquery图片淡入淡出与图片切换效果的例子
  • linux能不能像xp那样子以幻灯片方式查看图片。我在一个文件夹里面有几张图片,想进行挑选。用幻灯片查看的方式比较方便
  • 加图片问题,我想在警告时加一个图片,程序如下,但我的图片出不来,各位高手帮帮忙
  • php按比例计算图片大小的代码 iis7站长之家
  • 请问如何在JAVAMAIL中显示图片,如果附件中不是图片,如何给它加上链接让用户下载呢?
  • jquery图片轮播插件仿支付宝2013版全屏图片幻灯片


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3