做一个按比例压缩图像的方法

来源:互联网 发布:软件著作权免税 编辑:程序博客网 时间:2024/04/29 08:56

此方法为网上抄袭而来,并非本人原创。

public static void ResizeImageFile(string pathFilename, byte[] imageFile, int targetSize)
    
{
        
using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile)))
        
{
            Size newSize 
= CalculateDimensions(oldImage.Size, targetSize);
            
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb))
            
{
                
using (Graphics canvas = Graphics.FromImage(newImage))
                
{
                    canvas.SmoothingMode 
= SmoothingMode.AntiAlias;
                    canvas.InterpolationMode 
= InterpolationMode.HighQualityBicubic;
                    canvas.PixelOffsetMode 
= PixelOffsetMode.HighQuality;

                    canvas.DrawImage(oldImage, 
new Rectangle(new Point(00), newSize));

                    
if (newSize.Width >= 400)
                    
{
                        canvas.TextRenderingHint 
= TextRenderingHint.AntiAlias;
                        
string imageCopyright = ConfigurationManager.AppSettings["ImageCopyright"].ToString();
                        Font font 
= new Font("Verdana"10);
                        SolidBrush solidBrushBlack 
= new SolidBrush(Color.Black);
                        SolidBrush solidBrushWhite 
= new SolidBrush(Color.White);
                        
//左上角
                        canvas.DrawString(imageCopyright, font, solidBrushBlack, 55);
                        canvas.DrawString(imageCopyright, font, solidBrushWhite, 
66);
                        
//右下角
                        SizeF sizeF = new SizeF();
                        sizeF 
= canvas.MeasureString(imageCopyright, font);
                        canvas.DrawString(imageCopyright, font, solidBrushWhite, newSize.Width 
- sizeF.Width - 5, newSize.Height - sizeF.Height);
                        canvas.DrawString(imageCopyright, font, solidBrushBlack, newSize.Width 
- sizeF.Width - 6, newSize.Height - sizeF.Height);
                    }


                    newImage.Save(pathFilename, ImageFormat.Jpeg);
                }

            }

        }

    }


    
private static Size CalculateDimensions(Size oldSize, int targetSize)
    
{
        Size newSize 
= new Size();
        
if (oldSize.Height > oldSize.Width)
        
{
            
if (oldSize.Height < targetSize)
            
{
                newSize.Width 
= oldSize.Width;
                newSize.Height 
= oldSize.Height;
            }

            
else
            
{
                newSize.Width 
= (int)(oldSize.Width * ((float)targetSize / (float)oldSize.Height) * 0.75);
                newSize.Height 
= (int)(targetSize * 0.75);
            }

        }

        
else
        
{
            
if (oldSize.Width < targetSize)
            
{
                newSize.Width 
= oldSize.Width;
                newSize.Height 
= oldSize.Height;
            }

            
else
            
{
                newSize.Width 
= targetSize;
                newSize.Height 
= (int)(oldSize.Height * ((float)targetSize / (float)oldSize.Width));
            }

        }

        
return newSize;
    }