zoukankan      html  css  js  c++  java
  • C#中图片切割,图片压缩,缩略图生成的代码

    **//// <summary>
        /// 图片切割函数
        /// </summary>
        /// <param name="sourceFile">原始图片文件</param>
        /// <param name="xNum">在X轴上的切割数量</param>
        /// <param name="yNum">在Y轴上的切割数量</param>
        /// <param name="quality">质量压缩比</param>
        /// <param name="outputFile">输出文件名,不带后缀</param>
        /// <returns>成功返回true,失败则返回false</returns>
        public static bool imageCut(String sourceFile, int xNum, int yNum, long quality, String outputFile)
        {
            try
            {
                long imageQuality                        =    quality;
                Bitmap sourceImage                       =    new Bitmap(sourceFile);
                ImageCodecInfo myImageCodecInfo          =    GetEncoderInfo("image/jpeg");
                Encoder myEncoder                        =    Encoder.Quality;
                EncoderParameters myEncoderParameters    =    new EncoderParameters(1);
                EncoderParameter myEncoderParameter      =    new EncoderParameter(myEncoder, imageQuality);
                myEncoderParameters.Param[0]             =    myEncoderParameter;
                float xWidth                             =    sourceImage.Width / xNum;
                float yWidth                             =    sourceImage.Height / yNum;
                String outputImage                       =    "";
                
                for (int countY = 0; countY < yNum; countY++)
                    for (int countX = 0; countX < xNum; countX++)
                    {
    
                        RectangleF cloneRect             =    new RectangleF(countX * xWidth, countY * yWidth, xWidth, yWidth);
                        Bitmap newImage                  =    sourceImage.Clone(cloneRect, PixelFormat.Format24bppRgb);
                        outputImage                      =    outputFile + countX + countY + ".jpg";
                        newImage.Save(outputImage, myImageCodecInfo, myEncoderParameters);
    
                    }
                return true;
            }
            catch
            {
                return false;
            }
    
        }
        #endregion imageCut
    
        imageCompress
    #region
    imageCompress
        /**//// <summary>
        /// 图片压缩函数
        /// </summary>
        /// <param name="sourceFile">原始图片文件</param>
        /// <param name="quality">质量压缩比</param>
        /// <param name="ouputFile">输出文件名,请用 .jpg 后缀 </param>
        /// <returns>成功返回true,失败则返回false</returns>
        public static bool imageCompress(String sourceFile,long quality,String outputFile)
        {
            try
            {
                long imageQuality                      =    quality;
                Bitmap sourceImage                     =    new Bitmap(sourceFile);
                ImageCodecInfo myImageCodecInfo        =    GetEncoderInfo("image/jpeg");
                Encoder myEncoder                      =    Encoder.Quality;
                EncoderParameters myEncoderParameters  =    new EncoderParameters(1);
                EncoderParameter myEncoderParameter    =    new EncoderParameter(myEncoder, imageQuality);
                myEncoderParameters.Param[0]           =    myEncoderParameter;
               
                sourceImage.Save(outputFile, myImageCodecInfo, myEncoderParameters);
                return true;
    
            }
            catch
            {
                return false;
            }
    
        }
        #endregion imageCompress
    
        getThumImage#region getThumImage
        /**//// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="sourceFile">原始图片文件</param>
        /// <param name="quality">质量压缩比</param>
        /// <param name="multiple">收缩倍数</param>
        /// <param name="outputFile">输出文件名</param>
        /// <returns>成功返回true,失败则返回false</returns>
        public static bool getThumImage(String sourceFile, long quality, int multiple, String outputFile)
        {
            try
            {
                long imageQuality                      =   quality;
                Bitmap sourceImage                     =   new Bitmap(sourceFile);
                ImageCodecInfo myImageCodecInfo        =   GetEncoderInfo("image/jpeg");
                Encoder myEncoder                      =   Encoder.Quality;
                EncoderParameters myEncoderParameters  =   new EncoderParameters(1);
                EncoderParameter myEncoderParameter    =   new EncoderParameter(myEncoder, imageQuality);
                myEncoderParameters.Param[0]           =   myEncoderParameter;
                float xWidth                           =   sourceImage.Width;
                float yWidth                           =   sourceImage.Height;
                Bitmap newImage                        =   new Bitmap((int)(xWidth /multiple), (int)(yWidth /multiple));
                Graphics g                             =   Graphics.FromImage(newImage);
                
                g.DrawImage(sourceImage, 0, 0, xWidth / multiple, yWidth / multiple);
                g.Dispose();
                newImage.Save(outputFile,myImageCodecInfo,myEncoderParameters);
                return true;
            }
            catch
            {
                return false;
            }
        }
        #endregion getThumImage
    
        ImageCodecInfo#region ImageCodecInfo
        /**//// <summary>
        /// 获取图片编码信息
        /// </summary>
        private static ImageCodecInfo GetEncoderInfo(String mimeType)
        {
            int j;
            ImageCodecInfo[] encoders;
            encoders = ImageCodecInfo.GetImageEncoders();
            for (j = 0; j < encoders.Length; ++j)
            {
                if (encoders[j].MimeType == mimeType)
                    return encoders[j];
            }
            return null;
        }
  • 相关阅读:
    极致平台开发技巧介绍1如何利用升级包,快速给客户升级
    如何用极致业务基础平台做一个通用企业ERP系列之三启用期间管理设计
    caca需要用到x11作为图形输出
    spring boot 使用 mybatis 开启事务回滚 的总结
    RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】
    RabbitMQ --- 直连交换机 【 有回调方法,获取消费结果 】
    RabbitMQ --- 直连交换机 【 无回调方法,不能获取消费结果 】
    spring boot 启动警告 WARN 15684 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 解决
    Java基础复习到此结束,统一把源码放到GitHub仓库了,响应开源精神
    用一道题 来 复习 MySQL 的 复杂 sql 语句
  • 原文地址:https://www.cnblogs.com/gc2013/p/3685023.html
Copyright © 2011-2022 走看看