• 在ASP.NET中为FCKEditor添加生成缩略图功能


    FCKEditor应该是目前用得比较多的免费的在线编辑器,它的功能完善,并支持多种编程语言

    在图片管理中,它只有简单的图象文件上传功能,在实际的操作中,可能不得不为一张比较大的图片制作一张小图,重新上传

    为了简化这一操作,考虑在FCKEditor中添加图象文件上传后自动等比生成对应的缩略图。

    先找到FCKEditor FOR .net的类库文档。因为该版本比较早期,可能需要转换。

    首先在FileWorkerBase.cs中添加

    代码
            private const string DEFAULT_THUMBNAIL_IMAGE_TYPE = ".gif.bmp.png.jpg.";//可供创建缩略图的文件类型
             private const Int32 DEFAULT_THUMBNAIL_IMAGE_WIDTH = 240;//px 缩略图生成的宽度
             private const Int32 DEFAULT_THUMBNAIL_IMAGE_HEIGHT = 180;//px 缩略图生成的高度


             
    private Int32 sThumbnailImageWidth;
            
    private Int32 sThumbnailImageHeight;


            
    /// <summary>
            
    /// 缩略图宽
             
    /// </summary>
            
    /// <value>The width of the thumbnail image.</value>
            public Int32 ThumbnailImageWidth
            {
                
    get
                {
                    
    object s = Application["FCKeditor:ThumbnailImageWidth"];
                    
    if (s == null)
                    {
                        s 
    = Session["FCKeditor:ThumbnailImageWidth"];
                        
    if (s == null)
                        {
                            s 
    = System.Configuration.ConfigurationSettings.AppSettings["FCKeditor:ThumbnailImageWidth"];
                        }
                    }
                    
    if (!Int32.TryParse(Convert.ToString(s), out sThumbnailImageWidth))
                    {
                        sThumbnailImageWidth 
    = DEFAULT_THUMBNAIL_IMAGE_WIDTH;
                    }
                    
    if (sThumbnailImageWidth < 1)
                    {
                        sThumbnailImageWidth 
    = DEFAULT_THUMBNAIL_IMAGE_WIDTH;
                    }

                    
    return sThumbnailImageWidth;
                }
            }
            
    /// <summary>
            
    /// 缩略图高
            
    /// </summary>
            
    /// <value>The Height of the thumbnail image.</value>
            protected Int32 ThumbnailImageHeight
            {
                
    get
                {

                    
    object s = Application["FCKeditor:ThumbnailImageHeight"];
                    
    if (s == null)
                    {
                        s 
    = Session["FCKeditor:ThumbnailImageHeight"];
                        
    if (s == null)
                        {
                            s 
    = System.Configuration.ConfigurationSettings.AppSettings["FCKeditor:ThumbnailImageHeight"];
                        }
                    }
                    
    if (!Int32.TryParse(Convert.ToString(s), out sThumbnailImageHeight))
                    {
                        sThumbnailImageHeight 
    = DEFAULT_THUMBNAIL_IMAGE_HEIGHT;
                    }
                    
    if (sThumbnailImageHeight < 1)
                    {
                        sThumbnailImageHeight 
    = DEFAULT_THUMBNAIL_IMAGE_HEIGHT;
                    }

                    
    return sThumbnailImageHeight;

                }
            }
            
    /// <summary>
            
    /// 可创建缩略图的文件类型
            
    /// </summary>
            
    /// <value>The type of the thumbnail image.</value>
            protected string ThumbnailImageType
            {
                
    get
                {
                    
    return DEFAULT_USER_FILES_TYPE;
                }
            }
            
    /// <summary>
            
    /// 创建缩略图,宽度指定,高度自适应
            
    /// </summary>
            
    /// <param name="filePath">文件路径</param>
            public void CreateThumbnailImage(string filePath)
            {
                
    if (filePath == null || filePath.Trim().Length == 0)
                {
                    
    return;//如果文件路径为空
                }
                
    string sFilePath = filePath.Replace("/""\\");
                
    string sFileFolder = sFilePath.Substring(0, sFilePath.LastIndexOf("\\"+ 1);
                
    string sFileName = sFilePath.Substring(0, sFilePath.LastIndexOf(".")).Substring(sFilePath.LastIndexOf("\\"+ 1);
                
    string sExt = System.IO.Path.GetExtension(sFilePath);
                
    if (!this.ThumbnailImageType.ToLower().Contains(sExt.ToLower() + "."))//包含有效的可用于创建缩略图的文件类型
                {
                    
    return;//如果文件不是图片文件
                }
                
    if (!System.IO.File.Exists(sFilePath))
                {
                    
    return;//如果文件不存在
                }

                System.Drawing.Image img 
    = null;
               
                
    try
                {
                    img 
    = Bitmap.FromFile(sFilePath);
                    
    //if (img.Width <= this.ThumbnailImageWidth && img.Height <= this.ThumbnailImageHeight)
                    if (img.Width <= this.ThumbnailImageWidth)
                    {
    //如果文件宽小于缩略图尺寸
                        img.Dispose();
                        
    return;
                    }
                    
    double percent = (double)img.Width / (double)img.Height;
                  
                    System.Drawing.Image.GetThumbnailImageAbort callback 
    = new Image.GetThumbnailImageAbort(this.GetThumbnailImageAbort);
                    Image smallImg 
    = img.GetThumbnailImage(this.ThumbnailImageWidth, Convert.ToInt32(this.ThumbnailImageWidth / percent), callback, IntPtr.Zero);
                    smallImg.Save(
    string.Format(@"{0}{1}_s.jpg", sFileFolder, sFileName), System.Drawing.Imaging.ImageFormat.Jpeg);
                    smallImg.Dispose();
                }
                
    catch (Exception ex)
                {
                    
    //TODO ANYTHING
                    
    //throw ex;
                }
                
    finally
                {
                    
    if (img != null)
                    {
                        img.Dispose();
                    }
                }
            }

            
    protected bool GetThumbnailImageAbort()
            {
                
    return false;
            }

    在FileBrowserConnector.css中修改FileUpload方法(在文件上传成功后的处理代码后面添加)

    //对图片文件生成缩略图
    this.CreateThumbnailImage(sFilePath);

    在Uploader.cs中修改OnLoad方法,同样在文件上传成功后的处理代码后面添加上面的代码

    完成后,FCKEditor自动在上传图象文件后生成缩略图,缩略图自动在原来的文件名后添加_s,并以jpg格式保存

    当然它只对指定格式的图象文件,并且大小超过设置的宽度时才会生成缩略图。

    希望此文件对大家有所帮助

  • 相关阅读:
    关于闭包的一些知识
    浏览器解析JavaScript原理(1)
    函数作用域及函数表达式
    jquery
    前端常用插件
    Git及GitHub
    angular框架
    express
    ES6基础
    Node.js相关总结
  • 原文地址:https://www.cnblogs.com/dreamcat/p/1765814.html
Copyright © 2020-2023  润新知