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

  • 相关阅读:
    通过rabbitmqadmin管理rabbitmq
    OpenCASCADE Incremental Mesh
    RvmTranslator6.6
    PipeCAD之管道标准库PipeStd(2)
    PipeCAD之管道标准库PipeStd
    OpenCASCADE Face Normals
    OpenCASCADE Make Face With Holes
    RvmTranslator6.5 is released
    qmake生成Visual Studio工程
    Levmar:Levenberg-Marquardt非线性最小二乘算法
  • 原文地址:https://www.cnblogs.com/waters/p/2133298.html
Copyright © 2011-2022 走看看