C#下载网页图片

前端下载

  function downloadImage(imgsrc) {
            let x = new XMLHttpRequest()
            x.open('GET', imgsrc, true)
            x.responseType = 'blob'
            x.onload = function () {
                let url = window.URL.createObjectURL(x.response)
                let a = document.createElement('a')
                a.href = url
                a.download = 'download';
                a.click()
            }
            x.send()
        }

后端下载方法


public static void downloadImage(string Imgurl, Dictionary<string, string> keyValues)
        {
            foreach (var item in keyValues)
            {
                try
                {
                    Thread.Sleep(2);
                    System.Net.ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc0 | 0x300 | 0xc00);
                    WebRequest request = WebRequest.Create(Imgurl);
                    WebResponse response = request.GetResponse();
                    Stream reader = response.GetResponseStream();
                    if (!Directory.Exists(item.Value))
                    {
                        Directory.CreateDirectory(item.Value);
                    }

                    FileStream writer = new FileStream(item.Value + item.Key, FileMode.OpenOrCreate, FileAccess.Write);
                    byte[] buff = new byte[512];
                    int c = 0; //实际读取的字节数
                    while ((c = reader.Read(buff, 0, buff.Length)) > 0)
                    {
                        writer.Write(buff, 0, c);
                    }
                    writer.Close();
                    writer.Dispose();
                    reader.Close();
                    reader.Dispose();
                    response.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("***************保存图片报错了,错误{0}****************", ex.Message);
                }
            }
        }

调用方法

Dictionary<string, string> dir = new Dictionary<string, string>();
  			 dir.Add(filename, filepath);//filename:保存在本地时的文件名,filepath保存在本地的地址
  			 //imgpath:文件下载地址
  			 downloadImage(imgpath, dir);

改造一下

单个文件下载

 bool downloadImage(string DownloadUrl, string SaveUrl, string FileName,bool isFace, out string msg)
            {

                try
                {
                    string sourceFilename = "";
                    msg = "";
                    if(isFace)
                    {
                    //获取绝对路径
                     sourceFilename = base.Request.MapPath(SaveUrl) + "\\" + FileName;
                    Thread.Sleep(2);
                    System.Net.ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc0 | 0x300 | 0xc00);
                    WebRequest request = WebRequest.Create(DownloadUrl);
                    WebResponse responses = request.GetResponse();
                    Stream reader = responses.GetResponseStream();//获取图片字节
                    if (!Directory.Exists(SaveUrl))
                    {
                        Directory.CreateDirectory(SaveUrl);
                    }

                    FileStream writer = new FileStream(sourceFilename, FileMode.OpenOrCreate, FileAccess.Write);
                    byte[] buff = new byte[512];
                    int c = 0; //实际读取的字节数
                    while ((c = reader.Read(buff, 0, buff.Length)) > 0)
                    {
                        writer.Write(buff, 0, c);
                    }
                    writer.Close();
                    writer.Dispose();
                    reader.Close();
                    reader.Dispose();
                    responses.Close();
                    }
    }

修改图片比例 并保存到绝对路径

//原格式图片路径(可以为相对路径),修改比例后保存的路径(必须为绝对路径),宽度,高度
public static void CreateThumbnail(string sourceFilename, string destFilename, int width, int height)
		{
			Image image = Image.FromFile(sourceFilename);
			if (image.Width <= width && image.Height <= height)
			{
				File.Copy(sourceFilename, destFilename, true);
				image.Dispose();
			}
			else
			{
				int width2 = image.Width;
				int height2 = image.Height;
				float num = (float)height / (float)height2;
				if ((float)width / (float)width2 < num)
				{
					num = (float)width / (float)width2;
				}
				width = (int)((float)width2 * num);
				height = (int)((float)height2 * num);
				Image image2 = new Bitmap(width, height);
				Graphics graphics = Graphics.FromImage(image2);
				graphics.Clear(Color.White);
				graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
				graphics.SmoothingMode = SmoothingMode.HighQuality;
				graphics.DrawImage(image, new Rectangle(0, 0, width, height), new Rectangle(0, 0, width2, height2), GraphicsUnit.Pixel);
				EncoderParameters encoderParameters = new EncoderParameters();
				EncoderParameter encoderParameter = new EncoderParameter(Encoder.Quality, 100L);
				encoderParameters.Param[0] = encoderParameter;
				ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
				ImageCodecInfo encoder = null;
				int num2 = 0;
				while (num2 < imageEncoders.Length)
				{
					if (!imageEncoders[num2].FormatDescription.Equals("JPEG"))
					{
						num2++;
						continue;
					}
					encoder = imageEncoders[num2];
					break;
				}
				image2.Save(destFilename, encoder, encoderParameters);
				encoderParameters.Dispose();
				encoderParameter.Dispose();
				image.Dispose();
				image2.Dispose();
				graphics.Dispose();
			}
		}

获取缩略图

public static Bitmap GetThumbnail(Bitmap b, int destHeight, int destWidth)
		{
			ImageFormat rawFormat = b.RawFormat;
			int num = 0;
			int num2 = 0;
			int width = b.Width;
			int height = b.Height;
			if (height > destHeight || width > destWidth)
			{
				if (width * destHeight < height * destWidth)
				{
					num = destWidth;
					num2 = destWidth * height / width;
				}
				else
				{
					num2 = destHeight;
					num = width * destHeight / height;
				}
			}
			else
			{
				num = destWidth;
				num2 = destHeight;
			}
			Bitmap bitmap = new Bitmap(destWidth, destHeight);
			Graphics graphics = Graphics.FromImage(bitmap);
			graphics.Clear(Color.Transparent);
			graphics.CompositingQuality = CompositingQuality.HighQuality;
			graphics.SmoothingMode = SmoothingMode.HighQuality;
			graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
			graphics.DrawImage(b, new Rectangle((destWidth - num) / 2, (destHeight - num2) / 2, num, num2), 0, 0, b.Width, b.Height, GraphicsUnit.Pixel);
			graphics.Dispose();
			EncoderParameters encoderParameters = new EncoderParameters();
			long[] value = new long[1]
			{
				100L
			};
			EncoderParameter encoderParameter = new EncoderParameter(Encoder.Quality, value);
			encoderParameters.Param[0] = encoderParameter;
			b.Dispose();
			return bitmap;
		}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

或与且与或非

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值