使用c#压缩asp.net中web url的图像

时间:2018-04-08 03:15:54

标签: c# asp.net

我正在尝试从网址缩小图片,我的代码就是这个

public static string GetBreaker(string fileName)
{
    string cacheBreaker = null;
    try
    {
        if (fileName.StartsWith("~"))
        {
            fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName.Remove(0));
        }
        cacheBreaker = File.GetLastWriteTime(fileName).ToFileTime().ToString();
    }
    catch { }

    return string.IsNullOrEmpty(cacheBreaker) ? string.Empty : string.Format("?cachebreaker={0}", cacheBreaker);
}

public static void SaveJpeg(string path, System.Drawing.Image img, int quality)
{
    if (quality < 0 || quality > 100)
        throw new ArgumentOutOfRangeException("quality must be between 0 and 100.");
    EncoderParameter qualityParam =
        new EncoderParameter(Encoder.Quality, quality);
    ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
    EncoderParameters encoderParams = new EncoderParameters(1);
    encoderParams.Param[0] = qualityParam;
    img.Save(path, jpegCodec, encoderParams);
}

private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
    for (int i = 0; i < codecs.Length; i++)
        if (codecs[i].MimeType == mimeType)
            return codecs[i];
    return null;
} 

protected void Button1_Click(object sender, EventArgs e)
{
    System.Drawing.Image myImage = System.Drawing.Image.FromFile(ImageUrltxt.Text.ToString());
    SaveJpeg(@"~/mintemp/demo.jpg", myImage, 50);
}

我收到的错误是这样的:

  

不支持URI格式。

在 System.Drawing.Image myImage = System.Drawing.Image.FromFile(ImageUrltxt.Text.ToString());

任何人都可以帮我解决这个问题。我对编程很新。提前谢谢,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

1。首先,您必须检查您的uri路径是否正确,例如:

string uriPath = "file:\\C:\\Users\\john\\documents\\visual studio 2010\\Projects\\proj";

string localPath = new Uri(uriPath).LocalPath;

2. 您必须将图片的uri添加为正确请检查您的图像的uri路径是否正确。

SaveJpeg(@"~/mintemp/demo.jpg", myImage, 50);

3。这是用c#编码(供参考)在c#中调整图像大小和压缩

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    private Boolean CheckFileType(String fileName)
    {
        String ext = Path.GetExtension(fileName) ;
        switch (ext.ToLower())
        {
            case ".gif":
                return true;
            case ".png":
                return true;
            case ".jpg":
                return true;
            case ".jpeg":
                return true;
            case ".bmp":
                return true;
            default:
                return false;
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        const int bmpW = 300;// //New image target width
        const int bmpH = 226;// //New Image target height

        if (FileUpload1.HasFile)
        {
            //Clear the error label text 
            lblError.Text = "";

            //Check to make sure the file to upload has a picture file format extention 
            //and set the target width and height

            if (this.CheckFileType(FileUpload1.FileName))
            {
                Int32 newWidth = bmpW;

                Int32 newHeight = bmpH;

                //Use the uploaded filename for saving without the "." extension

                String upName = FileUpload1.FileName.Substring(0, FileUpload1.FileName.IndexOf("."));
                //Mid(FileUpload1.FileName, 1, (InStr(FileUpload1.FileName, ".") - 1)) ;

                //Set the save path of the resized image, you will need this directory already created in your web site

                String filePath = "~/Upload/" + upName + ".jpg";

                //Create a new Bitmap using the uploaded picture as a Stream 
                //Set the new bitmap resolution to 72 pixels per inch

                Bitmap upBmp = (Bitmap)Bitmap.FromStream(FileUpload1.PostedFile.InputStream);

                Bitmap newBmp = new Bitmap(newWidth, newHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                newBmp.SetResolution(72, 72);

                //Get the uploaded image width and height

                Int32 upWidth = upBmp.Width;

                Int32 upHeight = upBmp.Height;

                Int32 newX = 0; //Set the new top left drawing position on the image canvas

                Int32 newY = 0;

                Decimal reDuce;

                //Keep the aspect ratio of image the same if not 4:3 and work out the newX and newY positions 
                //to ensure the image is always in the centre of the canvas vertically and horizontally

                if (upWidth > upHeight)
                {
                    //Landscape picture

                    reDuce = newWidth / upWidth;

                    //calculate the width percentage reduction as decimal

                    newHeight = ((Int32)(upHeight * reDuce));

                    //reduce the uploaded image height by the reduce amount

                    newY = ((Int32)((bmpH - newHeight) / 2));

                    //Position the image centrally down the canvas

                    newX = 0; //Picture will be full width 
                }
                else
                {
                    if (upWidth < upHeight)
                    {
                        //Portrait picture

                        reDuce = newHeight / upHeight;

                        //calculate the height percentage reduction as decimal

                        newWidth = ((Int32)(upWidth * reDuce));

                        //reduce the uploaded image height by the reduce amount

                        newX = ((Int32)((bmpW - newWidth) / 2));

                        //Position the image centrally across the canvas

                        newY = 0; //Picture will be full hieght 
                    }
                    else
                    {
                        if (upWidth == upHeight)
                        {
                            //square picture

                            reDuce = newHeight / upHeight;

                            //calculate the height percentage reduction as decimal

                            newWidth = ((Int32)((upWidth * reDuce)));

                            //reduce the uploaded image height by the reduce amount

                            newX = ((Int32)(((bmpW - newWidth) / 2))); //Position the image centrally across the canvas

                            newY = ((Int32)(((bmpH - newHeight) / 2))); //Position the image centrally down the canvas

                        }
                    }
                }

                //Create a new image from the uploaded picture using the Graphics class

                //Clear the graphic and set the background colour to white

                //Use Antialias and High Quality Bicubic to maintain a good quality picture

                //Save the new bitmap image using //Png// picture format and the calculated canvas positioning

                Graphics newGraphic = Graphics.FromImage(newBmp);

                try
                {
                    newGraphic.Clear(Color.White);

                    newGraphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

                    newGraphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

                    newGraphic.DrawImage(upBmp, newX, newY, newWidth, newHeight);

                    newBmp.Save(MapPath(filePath), System.Drawing.Imaging.ImageFormat.Jpeg);

                    //Show the uploaded resized picture in the image control

                    Image1.ImageUrl = filePath;

                    Image1.Visible = true;

                }
                catch (Exception ex)
                {
                    lblError.Text = ex.ToString();
                    throw ex;
                }
                finally
                {
                    upBmp.Dispose();

                    newBmp.Dispose();

                    newGraphic.Dispose();
                }
            }
            else
            {
                lblError.Text = "Please select a picture with a file format extension of either Bmp, Jpg, Jpeg, Gif or Png.";

            }
        }
    }

}