制作缩略图、远程缩略图

/// 
/// 制作远程缩略图
/// 
/// 图片URL
/// 新图路径
/// 最大宽度
/// 最大高度
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);
}

 

/// 
/// 获取图片流
/// 
/// 图片URL
/// 
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;
    }
}

 

/// 
/// 制作缩略图
/// 
/// 图片对象
/// 新图路径
/// 最大宽度
/// 最大高度
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();
        }
    }
}

 

/// 
/// 计算新尺寸
/// 
/// 原始宽度
/// 原始高度
/// 最大新宽度
/// 最大新高度
/// 
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);            
}

 

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

制作缩略图、远程缩略图_第1张图片

你可能感兴趣的:(制作缩略图、远程缩略图)