zoukankan      html  css  js  c++  java
  • 制作缩略图、远程缩略图

    /// <summary>
    /// 制作远程缩略图
    /// </summary>
    /// <param name="url">图片URL</param>
    /// <param name="newFileName">新图路径</param>
    /// <param name="maxWidth">最大宽度</param>
    /// <param name="maxHeight">最大高度</param>
    public static void MakeRemoteThumbnailImage(string url, string newFileName, int maxWidth, int maxHeight)
    {
        Stream stream = GetRemoteImage(url);
        if(stream == null)
            return;
        Image original = Image.FromStream(stream);
        stream.Close();
        MakeThumbnailImage(original, newFileName, maxWidth, maxHeight);
    }
    /// <summary>
    /// 获取图片流
    /// </summary>
    /// <param name="url">图片URL</param>
    /// <returns></returns>
    private static Stream GetRemoteImage(string url)
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.Method = "GET";
        request.ContentLength = 0;
        request.Timeout = 20000;
        HttpWebResponse response = null;
    
        try
        {
            response = (HttpWebResponse)request.GetResponse();
            return response.GetResponseStream();
        }
        catch
        {
            return null;
        }
    }
    /// <summary>
    /// 制作缩略图
    /// </summary>
    /// <param name="original">图片对象</param>
    /// <param name="newFileName">新图路径</param>
    /// <param name="maxWidth">最大宽度</param>
    /// <param name="maxHeight">最大高度</param>
    public static void MakeThumbnailImage(Image original, string newFileName, int maxWidth, int maxHeight)
    {
        Size _newSize = ResizeImage(original.Width,original.Height,maxWidth, maxHeight);
    
        using (Image displayImage = new Bitmap(original, _newSize))
        {
            try
            {
                displayImage.Save(newFileName, original.RawFormat);
            }
            finally
            {
                original.Dispose();
            }
        }
    }
    /// <summary>
    /// 计算新尺寸
    /// </summary>
    /// <param name="width">原始宽度</param>
    /// <param name="height">原始高度</param>
    /// <param name="maxWidth">最大新宽度</param>
    /// <param name="maxHeight">最大新高度</param>
    /// <returns></returns>
    private static Size ResizeImage(int width, int height, int maxWidth, int maxHeight)
    { 
        if (maxWidth <= 0)
            maxWidth = width;
        if (maxHeight <= 0)
            maxHeight = height; 
        decimal MAX_WIDTH = (decimal)maxWidth;
        decimal MAX_HEIGHT = (decimal)maxHeight;
        decimal ASPECT_RATIO = MAX_WIDTH / MAX_HEIGHT;
    
        int newWidth, newHeight;
        decimal originalWidth = (decimal)width;
        decimal originalHeight = (decimal)height;
        
        if (originalWidth > MAX_WIDTH || originalHeight > MAX_HEIGHT) 
        {
            decimal factor;
            // determine the largest factor 
            if (originalWidth / originalHeight > ASPECT_RATIO) 
            {
                factor = originalWidth / MAX_WIDTH;
                newWidth = Convert.ToInt32(originalWidth / factor);
                newHeight = Convert.ToInt32(originalHeight / factor);
            } 
            else 
            {
                factor = originalHeight / MAX_HEIGHT;
                newWidth = Convert.ToInt32(originalWidth / factor);
                newHeight = Convert.ToInt32(originalHeight / factor);
            }      
        } 
        else 
        {
            newWidth = width;
            newHeight = height;
        }
        return new Size(newWidth,newHeight);            
    }

    若对您有用,请赞助个棒棒糖~

  • 相关阅读:
    Java学习之路-Hessian学习
    Hessian知识学习总结(二)——Hessian的helloworld
    如何封装RESTful Web Service
    c#string为传值模式
    Acrobat 无法在本页面上执行OCR识别
    redis error It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. SocketFailure on PING
    关于bootstrap的modal弹出层嵌套子Modal所引发的血案(转)
    项目学习——后台事件监听并触发相应操作
    Redis学习笔记
    正则表达式
  • 原文地址:https://www.cnblogs.com/shurun/p/11928900.html
Copyright © 2011-2022 走看看