保存远程图片 参数无效

u011151921 2016-03-24 05:58:32
//WebClient myWebClient = new WebClient();
//myWebClient.DownloadFile(imgpath, savwpath + "/" + imgName);
WebRequest wreq = WebRequest.Create(imgpath);
wreq.Timeout = 10000;
HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse();
Stream s = wresp.GetResponseStream();
System.Drawing.Image img;
img = System.Drawing.Image.FromStream(s);
switch (imgExt.ToLower())
{
case ".gif":
img.Save(savwpath + "/" + imgName, ImageFormat.Gif);
break;
case ".jpg":
case ".jpeg":
img.Save(savwpath + "/" + imgName, ImageFormat.Jpeg);
break;
case ".png":
img.Save(savwpath + "/" + imgName, ImageFormat.Png);
break;
case ".icon":
img.Save(savwpath + "/" + imgName, ImageFormat.Icon);
break;
case ".bmp":
img.Save(savwpath + "/" + imgName, ImageFormat.Bmp);
break;
}
cssText = cssText.Replace(imgpath, webpath + imgName);
img.Dispose();
s.Dispose();

正常图片是可以保存的,但是如果图片非正常的格式就保存不了。。如何保存??
img = System.Drawing.Image.FromStream(s); s保存的时候会出异常提示参数无效。

//WebClient myWebClient = new WebClient();
//myWebClient.DownloadFile(imgpath, savwpath + "/" + imgName);
用这个倒是可以保存下来,但是是个空图。。上面两种,正常图片都是可以保存的。
...全文
217 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xanl 2016-03-25
  • 打赏
  • 举报
回复
直接Save就好了,如果不确定图片格式就不要Save保存了啊,不是jpg格式的图片但以.bmp结尾,你非要以bmp的格式将它保存,那是一定会出错的啊
Xanl 2016-03-25
  • 打赏
  • 举报
回复
直接Save就好了,如果不确定图片格式就不要Save保存了啊,不是bmp格式的图片但以.bmp结尾,你非要以bmp的格式将它保存,那是一定会出错的啊
xdashewan 2016-03-25
  • 打赏
  • 举报
回复
保存不了的图片直接把流写进文件,反正本来保存下来也打不开,意思意思保存个文件就行了
u011151921 2016-03-25
  • 打赏
  • 举报
回复
引用 3 楼 FoxDave 的回复:
什么是非正常的图片格式?
大概意思,就比如说,我把一张png直接后缀改为jpg,可以看,但如果放到ps会提示打不开,在比如用一些其它的XX软件处理过的图片。。像素点比较多还是什么情况的。。反正正常保存不了。。只要能保存http://www.yummy77.com/skin/df3/images/help_tel.gif像这种图片到本地,就OK。。。
Justin-Liu 2016-03-25
  • 打赏
  • 举报
回复
什么是非正常的图片格式?
u011151921 2016-03-25
  • 打赏
  • 举报
回复
引用 1 楼 myhope88 的回复:
都可以保存了,还问啥呢
不是格式不规范的图片不知道怎么保存,上面的方法只能保存正常的图片。我是要指批量保存网上的图片,但有些网站图片格式不规范保存不下来。。就是想问这些不规范的怎么保存? http://www.yummy77.com/skin/df3/images/help_tel.gif 就像这张图用程序保存不下来。
myhope88 2016-03-25
  • 打赏
  • 举报
回复
都可以保存了,还问啥呢
  • 打赏
  • 举报
回复
        static void Save()
        {
            string url = @"http://www.yummy77.com/skin/df3/images/help_tel.gif";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            var bytes = GetResponseBody(response);
            using (var writeStream = File.Create("D:/" + Path.GetFileName(url)))
            {
                writeStream.Write(bytes, 0, bytes.Length);
            }
        }

        private static byte[] GetResponseBody(HttpWebResponse response)
        {
            byte[] bytes = null;
            if (response.ContentEncoding.ToLower().Contains("gzip"))
            {
                using (GZipStream stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))
                {
                    bytes = GetBytes(stream);
                }
            }
            else if (response.ContentEncoding.ToLower().Contains("deflate"))
            {
                using (DeflateStream stream = new DeflateStream(response.GetResponseStream(), CompressionMode.Decompress))
                {
                    bytes = GetBytes(stream);
                }
            }
            else
            {
                using (Stream stream = response.GetResponseStream())
                {
                    bytes = GetBytes(stream);
                }
            }
            return bytes;
        }

        private static byte[] GetBytes(Stream stream)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                byte[] bytes = new byte[40960];
                int n;
                while ((n = stream.Read(bytes, 0, bytes.Length)) > 0)
                {
                    ms.Write(bytes, 0, n);
                }
                return ms.ToArray();
            }
        }
你就给分吧……
xdashewan 2016-03-25
  • 打赏
  • 举报
回复
引用 12 楼 xdashewan 的回复:
测试图片完整,保存很正常
图片正常打开
xdashewan 2016-03-25
  • 打赏
  • 举报
回复
引用 8 楼 u011151921 的回复:
要是这么简单,我也不发贴了。。http://www.yummy77.com/skin/df3/images/help_tel.gif你把这图片保存下来。。在网上找了很多方法。。要么保存下来的是空图,要么出异常提示“参数无效”
测试图片完整,保存很正常
  • 打赏
  • 举报
回复
直接File.Create(path).Write试试,不要进行转换 或者按下面的标准判断这个实际是什么图片
//根据Request.Files[0].ContentType判断并不是很准确,一般情况下它是对的  
//但如果你创建个文本文件,然后将它后缀改成jpg,你会发现上传时它的ContentType就是"image/jpeg"或者 "image/pjpeg"  
//但实际上它根本就不是jpg图片,所以按照字节判断才更准确  
//byte[] bytes = new byte[2];  
//读取图片的第一第二个字节到bytes  
//判断string.Format("{0}{1}",bytes[0],bytes[1]);  
//255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar 
insus 2016-03-25
  • 打赏
  • 举报
回复
参考这篇:http://www.cnblogs.com/insus/archive/2012/10/20/2732169.html,其中有一段代码:


还有一篇: http://www.cnblogs.com/insus/archive/2013/02/05/2892678.html,也有一段代码:


都可以从一个图片连接或是路径存另一个文件。
u011151921 2016-03-25
  • 打赏
  • 举报
回复
引用 7 楼 u010811342 的回复:
直接Save就好了,如果不确定图片格式就不要Save保存了啊,不是bmp格式的图片但以.bmp结尾,你非要以bmp的格式将它保存,那是一定会出错的啊
http://www.yummy77.com/skin/df3/images/help_tel.gif用程序把这图保存到本地,我马上结贴给分。。
u011151921 2016-03-25
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
保存不了的图片直接把流写进文件,反正本来保存下来也打不开,意思意思保存个文件就行了
这个保存下来的文件可以看的吗?我是
引用 7 楼 u010811342 的回复:
直接Save就好了,如果不确定图片格式就不要Save保存了啊,不是bmp格式的图片但以.bmp结尾,你非要以bmp的格式将它保存,那是一定会出错的啊
要是这么简单,我也不发贴了。。http://www.yummy77.com/skin/df3/images/help_tel.gif你把这图片保存下来。。在网上找了很多方法。。要么保存下来的是空图,要么出异常提示“参数无效”

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧