【求助】C#保存图片为什么改变图片的大小???

Vict0r Chen 2013-09-16 03:36:20
我是这么做的:我是先打开选择文件窗体,然后得到图片路径,保存到fullPath变量里,
byte[] b = ImgToByt(Image.FromFile(fullPath));

然后传到Web服务进行保存,Web服务的方法是这样的:

[WebMethod]
public object UpdateFile(byte[] content, string extended)
{
//重命名图片的名称与路径 保存到F盘下的DC文件夹
string pn = string.Format(@"F:\DC\{0}.{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), extended);
//File.WriteAllBytes(Server.MapPath(pathandname), content);
//File.WriteAllBytes(pn, content);
MemoryStream ms=new MemoryStream(content);
FileStream fs=new FileStream(pn,FileMode.Create);
ms.WriteTo(fs);
ms.Close();
fs.Close();
return content.Length;
}

这里不管我用File.WriteAllBytes还是现在这种方法保存,图片大小都会改变,从100多K变成了200多K
...全文
393 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vict0r Chen 2013-09-16
  • 打赏
  • 举报
回复
引用 16 楼 jiaoshiyao 的回复:
还不给分操蛋 重在参与嘛
给分了亲!
jiaoshiyao 2013-09-16
  • 打赏
  • 举报
回复
还不给分操蛋 重在参与嘛
jiaoshiyao 2013-09-16
  • 打赏
  • 举报
回复
引用 14 楼 u010312979 的回复:
3Q个毛啊 我说的不对啊
Vict0r Chen 2013-09-16
  • 打赏
  • 举报
回复
引用 12 楼 jiaoshiyao 的回复:
图片有个分辨率 就是你100*100的图片可能是1000*1000的分辨率 他这个可能就是1000*1000的图片然后是100*100的分辨率 最后bitmap重新生成大小的时候把100*100的分辨率变成了1000*1000的了
引用 12 楼 jiaoshiyao 的回复:
图片有个分辨率 就是你100*100的图片可能是1000*1000的分辨率 他这个可能就是1000*1000的图片然后是100*100的分辨率 最后bitmap重新生成大小的时候把100*100的分辨率变成了1000*1000的了
问题已解决,3Q!
Vict0r Chen 2013-09-16
  • 打赏
  • 举报
回复
引用 9 楼 qldsrx 的回复:
img.Save方法本身就会改变原图数据,你无法包装读取和保存的格式是完全一样的,这里保存其实是图形编码。 另外imagedata = ms.GetBuffer();是错误的,要写成:imagedata = ms.ToArray(); Buffer的尺寸远大于实际大小,不然就不叫缓存了。
谢谢!!!!!!!!问题解决了!果然是这个问题!高手!
jiaoshiyao 2013-09-16
  • 打赏
  • 举报
回复
图片有个分辨率 就是你100*100的图片可能是1000*1000的分辨率 他这个可能就是1000*1000的图片然后是100*100的分辨率 最后bitmap重新生成大小的时候把100*100的分辨率变成了1000*1000的了
卧_槽 2013-09-16
  • 打赏
  • 举报
回复
引用 10 楼 u010312979 的回复:
[quote=引用 7 楼 yuwenge 的回复:] content.Length是200多k么? byte[] b 的length是多少? 你的100多变200多到底哪个是100多k?
那两个都是100多K,我弹出来看过,保存后就变200多K了,不知道这几十K是怎么来的[/quote] 9楼正解。
Vict0r Chen 2013-09-16
  • 打赏
  • 举报
回复
引用 7 楼 yuwenge 的回复:
content.Length是200多k么? byte[] b 的length是多少? 你的100多变200多到底哪个是100多k?
那两个都是100多K,我弹出来看过,保存后就变200多K了,不知道这几十K是怎么来的
qldsrx 2013-09-16
  • 打赏
  • 举报
回复
img.Save方法本身就会改变原图数据,你无法包装读取和保存的格式是完全一样的,这里保存其实是图形编码。 另外imagedata = ms.GetBuffer();是错误的,要写成:imagedata = ms.ToArray(); Buffer的尺寸远大于实际大小,不然就不叫缓存了。
Vict0r Chen 2013-09-16
  • 打赏
  • 举报
回复
引用 5 楼 jiaoshiyao 的回复:
FileStream stream = new FileStream("",FileMode.Create); StreamWriter sw = new StreamWriter(stream); sw.WriteAllBytes(by); sw.Close(); stream.Close();
神马意思?
卧_槽 2013-09-16
  • 打赏
  • 举报
回复
content.Length是200多k么? byte[] b 的length是多少? 你的100多变200多到底哪个是100多k?
jiaoshiyao 2013-09-16
  • 打赏
  • 举报
回复
引用 2 楼 yuwenge 的回复:
ImgToByt方法里写了什么?
你说你也是你回复给人家解决下也行阿
jiaoshiyao 2013-09-16
  • 打赏
  • 举报
回复
FileStream stream = new FileStream("",FileMode.Create); StreamWriter sw = new StreamWriter(stream); sw.WriteAllBytes(by); sw.Close(); stream.Close();
Vict0r Chen 2013-09-16
  • 打赏
  • 举报
回复
怎么沉得这么快............
Vict0r Chen 2013-09-16
  • 打赏
  • 举报
回复
引用 2 楼 yuwenge 的回复:
ImgToByt方法里写了什么?
public static byte[] ImgToByt(Image img)
        {
            MemoryStream ms = new MemoryStream();
            byte[] imagedata = null;
            img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            imagedata = ms.GetBuffer();
            return imagedata;
        }
卧_槽 2013-09-16
  • 打赏
  • 举报
回复
ImgToByt方法里写了什么?
Vict0r Chen 2013-09-16
  • 打赏
  • 举报
回复
听说苦B都要自己顶帖........

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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