小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C#圖片處理基本應(yīng)用(裁剪,縮放,清晰度,水印)

 悟靜 2011-04-29

代碼

封裝了幾個通用的方法,如發(fā)現(xiàn)有BUG或漏洞還請及時指正。

 

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
  
namespace WuJian.Common
{
    /// <summary>
    /// 圖片處理類
    /// 吳劍 2008-07-02 創(chuàng)建
    /// 吳劍 2011-01-21 修改
    /// </summary>
    public class PTImage
    {
        #region 正方型裁剪并縮放
        /// <summary>
        /// 正方型裁剪
        /// 以圖片中心為軸心,截取正方型,然后等比縮放
        /// 用于頭像處理
        /// </summary>
        /// <remarks>吳劍 2010-11-23</remarks>
        /// <param name="postedFile">原圖HttpPostedFile對象</param>
        /// <param name="fileSaveUrl">縮略圖存放地址</param>
        /// <param name="side">指定的邊長(正方型)</param>
        /// <param name="quality">質(zhì)量(范圍0-100)</param>
        public static void CutForSquare(System.Web.HttpPostedFile postedFile, string fileSaveUrl, int side, int quality)
        {
            //創(chuàng)建目錄
            string dir = Path.GetDirectoryName(fileSaveUrl);
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);
  
            //原始圖片(獲取原始圖片創(chuàng)建對象,并使用流中嵌入的顏色管理信息)
            System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);
  
            //原圖寬高均小于模版,不作處理,直接保存
            if (initImage.Width <= side && initImage.Height <= side)
            {
                initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            else
            {
                //原始圖片的寬、高
                int initWidth = initImage.Width;
                int initHeight = initImage.Height;
  
                //非正方型先裁剪為正方型
                if (initWidth != initHeight)
                {
                    //截圖對象
                    System.Drawing.Image pickedImage = null;
                    System.Drawing.Graphics pickedG = null;
  
                    //寬大于高的橫圖
                    if (initWidth > initHeight)
                    {
                        //對象實(shí)例化
                        pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);
                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);
                        //設(shè)置質(zhì)量
                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        //定位
                        Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);
                        Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);
                        //畫圖
                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
                        //重置寬
                        initWidth = initHeight;
                    }
                    //高大于寬的豎圖
                    else
                    {
                        //對象實(shí)例化
                        pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);
                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);
                        //設(shè)置質(zhì)量
                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        //定位
                        Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);
                        Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);
                        //畫圖
                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
                        //重置高
                        initHeight = initWidth;
                    }
  
                    //將截圖對象賦給原圖
                    initImage = (System.Drawing.Image)pickedImage.Clone();
                    //釋放截圖資源
                    pickedG.Dispose();
                    pickedImage.Dispose();
                }
  
                //縮略圖對象
                System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);
                System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);
                //設(shè)置質(zhì)量
                resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                //用指定背景色清空畫布
                resultG.Clear(Color.White);
                //繪制縮略圖
                resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);
  
                //關(guān)鍵質(zhì)量控制
                //獲取系統(tǒng)編碼類型數(shù)組,包含了jpeg,bmp,png,gif,tiff
                ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo ici = null;
                foreach (ImageCodecInfo i in icis)
                {
                    if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")
                    {
                        ici = i;
                    }
                }
                EncoderParameters ep = new EncoderParameters(1);
                ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);
  
                //保存縮略圖
                resultImage.Save(fileSaveUrl, ici, ep);
  
                //釋放關(guān)鍵質(zhì)量控制所用資源
                ep.Dispose();
  
                //釋放縮略圖資源
                resultG.Dispose();
                resultImage.Dispose();
  
                //釋放原始圖片資源
                initImage.Dispose();
            }
        }
  
        /// <summary>
        /// 正方型裁剪
        /// 以圖片中心為軸心,截取正方型,然后等比縮放
        /// 用于頭像處理
        /// </summary>
        /// <remarks>吳劍 2010-11-23</remarks>
        /// <param name="postedFile">原圖HttpPostedFile對象</param>
        /// <param name="fileSaveUrl">縮略圖存放地址</param>
        /// <param name="side">指定的邊長(正方型)</param>
        /// <param name="quality">質(zhì)量(范圍0-100)</param>
        public static void CutForSquare(System.IO.Stream fromFile, string fileSaveUrl, int side, int quality)
        {
            //創(chuàng)建目錄
            string dir = Path.GetDirectoryName(fileSaveUrl);
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);
  
            //原始圖片(獲取原始圖片創(chuàng)建對象,并使用流中嵌入的顏色管理信息)
            System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);
  
            //原圖寬高均小于模版,不作處理,直接保存
            if (initImage.Width <= side && initImage.Height <= side)
            {
                initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            else
            {
                //原始圖片的寬、高
                int initWidth = initImage.Width;
                int initHeight = initImage.Height;
  
                //非正方型先裁剪為正方型
                if (initWidth != initHeight)
                {
                    //截圖對象
                    System.Drawing.Image pickedImage = null;
                    System.Drawing.Graphics pickedG = null;
  
                    //寬大于高的橫圖
                    if (initWidth > initHeight)
                    {
                        //對象實(shí)例化
                        pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);
                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);
                        //設(shè)置質(zhì)量
                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        //定位
                        Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);
                        Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);
                        //畫圖
                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
                        //重置寬
                        initWidth = initHeight;
                    }
                    //高大于寬的豎圖
                    else
                    {
                        //對象實(shí)例化
                        pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);
                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);
                        //設(shè)置質(zhì)量
                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        //定位
                        Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);
                        Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);
                        //畫圖
                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
                        //重置高
                        initHeight = initWidth;
                    }
  
                    //將截圖對象賦給原圖
                    initImage = (System.Drawing.Image)pickedImage.Clone();
                    //釋放截圖資源
                    pickedG.Dispose();
                    pickedImage.Dispose();
                }
  
                //縮略圖對象
                System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);
                System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);
                //設(shè)置質(zhì)量
                resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                //用指定背景色清空畫布
                resultG.Clear(Color.White);
                //繪制縮略圖
                resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約