zoukankan      html  css  js  c++  java
  • 用于图片切割,图片压缩,缩略图的生成

     /// <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

        
    #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

        
    #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, 
    00, xWidth / multiple, yWidth / multiple);
                g.Dispose();
                newImage.Save(outputFile,myImageCodecInfo,myEncoderParameters);
                
    return true;
            }

            
    catch
            
    {
                
    return false;
            }

        }

        
    #endregion
     getThumImage

        
    #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;
        }

  • 相关阅读:
    台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯
    台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接
    Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解
    Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
    案例分享:Qt modbus485调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.3.0)
    案例分享:某品牌音响系列协议调试工具(搜寻主机,查询通道,基本控制API,云音乐API,语言节目API等,可增删改指令)
    stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo
    stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)
    Qt三方库开发技术(一):QuaZIP介绍、编译和使用
    NSIS制作安装包笔记(二):NSIS使用NSIS+Qt界面制作安装包流程
  • 原文地址:https://www.cnblogs.com/waters/p/2133298.html
Copyright © 2011-2022 走看看